Mysql检查列是否存在并新增、修改、删除列

很多时候只有自己遇到了问题才会着手去解决,这次刚好遇到了Mysql检查列是否存在的问题,顺便看到了网上其他大神也遇到过该问题就当作经验自己积累下来吧。

在MYSQL中,新增、修改、删除列时不能进行IF EXISTS判断,IF语句只能出现在存储过程当中,故博主用存储过程的方法新增、修改、删除列,修改列名称。

DROP PROCEDURE IF EXISTS Pro_ColumnWork;
DELIMITER$$
-- 1表示新增列,2表示修改列类型,3表示修改列名称,4表示删除列
CREATE PROCEDURE Pro_ColumnWork(TableName VARCHAR(50),ColumnName VARCHAR(50),CType INT,SqlStr VARCHAR(4000))
BEGIN
DECLARE Rows1 INT;
SET Rows1=0;
SELECT COUNT(*) INTO Rows1  FROM INFORMATION_SCHEMA.Columns
WHERE table_schema= DATABASE() AND table_name=TableName AND column_name=ColumnName;
-- 新增列
IF (CType=1 AND Rows1<=0) THEN
SET SqlStr := CONCAT( 'ALTER TABLE ',TableName,' ADD COLUMN ',ColumnName,' ',SqlStr);
-- 修改列类型
ELSEIF (CType=2 AND Rows1>0)  THEN
SET SqlStr := CONCAT('ALTER TABLE ',TableName,' MODIFY  ',ColumnName,' ',SqlStr);
-- 修改列名称
ELSEIF (CType=3 AND Rows1>0) THEN
SET SqlStr := CONCAT('ALTER TABLE  ',TableName,' CHANGE  ',ColumnName,' ',SqlStr);
-- 删除列
ELSEIF (CType=4 AND Rows1>0) THEN
SET SqlStr := CONCAT('ALTER TABLE  ',TableName,' DROP COLUMN  ',ColumnName);
ELSE  SET SqlStr :='';
END IF;
-- 执行命令
IF (SqlStr<>'') THEN 
SET @SQL1 = SqlStr;
PREPARE stmt1 FROM @SQL1;  
EXECUTE stmt1;
END IF;
END$$
DELIMITER ;


-- CALL Pro_ColumnWork ('BaseInfo','Name2',4,'VARCHAR(50)');
-- CALL Pro_ColumnWork ('BaseInfo','Abc',4,'VARCHAR(30)');
Mysql没有直接的语法可以在增加列前进行判断该列是否存在,需要写一个存储过程完成同样任务, 下面例子是:在 iyb_ha_category_campaign
表中增加一列company_id列 :
CREATE PROCEDURE add_column() BEGIN
IF EXISTS(SELECT
		1
	FROM
		information_schema.`COLUMNS`
	WHERE
		`TABLE_SCHEMA` = 'broker_00'
	AND `TABLE_NAME` = 'iyb_ha_category_campaign'
	AND `COLUMN_NAME` = 'company_id')
THEN
	 ALTER TABLE `broker_00`.`iyb_ha_category_campaign`  DROP COLUMN `company_id`;  
END IF;
	 ALTER TABLE `broker_00`.`iyb_ha_category_campaign`
	 ADD COLUMN `company_id`  varchar(50) CHARACTER SET utf8 NULL DEFAULT null COMMENT '关联顶级公司id' AFTER `campaign_id`;
END;
CALL add_column(); -- 执行该存储过程
DROP PROCEDURE IF EXISTS add_column; 


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值