MySql通過存儲過程新增表字段、普通索引

  1. 新增表字段(已存在該字段會先刪除)
DELIMITER $$

DROP PROCEDURE IF EXISTS `AddColumn`$$

CREATE DEFINER=`root`@`%` PROCEDURE `AddColumn`(
  IN tableName TINYTEXT,
  IN fieldName TINYTEXT,
  IN fieldDef TEXT
)
BEGIN
  IF EXISTS
  (SELECT
    *
  FROM
    information_schema.COLUMNS
  WHERE column_name = fieldName
    AND table_name = tableName
    AND table_schema = DATABASE())
  THEN SET @ddd = CONCAT(
    'ALTER TABLE ',
    DATABASE(),
    '.',
    tableName,
    ' DROP COLUMN ',
    fieldName
  );
  PREPARE stmt FROM @ddd;
  EXECUTE stmt;
  END IF;
  SET @dda = CONCAT(
    'ALTER TABLE ',
    DATABASE(),
    '.',
    tableName,
    ' ADD COLUMN ',
    fieldName,
    ' ',
    fieldDef
  );
  PREPARE stmt FROM @dda;
  EXECUTE stmt;
END$$

DELIMITER ;

 使用:

CALL AddColumn('shop_address','is_del','TINYINT(1) DEFAULT 0 NULL COMMENT "刪除標記,1刪除;0未刪除默認"');
  1. 新增普通索引(已存在該索引名稱會忽略)
DELIMITER $$

DROP PROCEDURE IF EXISTS `AddIndex`$$

CREATE DEFINER=`root`@`%` PROCEDURE `AddIndex`(
  IN p_tablename VARCHAR (200),
  IN p_indexname VARCHAR (200),
  IN p_index VARCHAR (200)
)
BEGIN
  DECLARE str VARCHAR (250);
  SET @str = CONCAT(
    ' ALTER TABLE ',
    p_tablename,
    ' ADD INDEX ',
    p_indexname,
    ' (',
    p_index,
    ') '
  );
  SELECT
    COUNT(*) INTO @cnt
  FROM
    information_schema.statistics
  WHERE TABLE_SCHEMA = DATABASE()
    AND table_name = p_tablename
    AND index_name = p_indexname;
  IF @cnt <= 0
  THEN PREPARE stmt FROM @str;
  EXECUTE stmt;
  END IF;
END$$

DELIMITER ;

使用:

CALL AddIndex('shop_address','tenant_id','tenant_id');

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章