mysql存储进程如何判断一个表是否存在_MySql数据库中,判断表、表字段(存储过程)是否存在,不存在就新增...

本文是针对MySql数据库创建的SQL脚本,别搞错咯。

判断表是否存在,不存在就可新增

CREATE TABLE IF NOT EXISTS `mem_cardtype_resource` (

...

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

判断表字段是否存在,不存在就可新增、修改、删除,移除修改列名

DROP PROCEDURE IF EXISTS Pro_Temp_ColumnWork;

DELIMITER$$

-- 1表示新增列,2表示修改列类型,3表示删除列

CREATE PROCEDURE Pro_Temp_ColumnWork(TableName VARCHAR(50),ColumnName VARCHAR(50),SqlStr VARCHAR(4000),CType INT)

BEGIN

-- 定义Row1,设置初始值,下一步count(*)赋值给Row1

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';

-- 新增列,下一步Sqlstr赋值

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,' DROP COLUMN ',ColumnName);

ELSE SET SqlStr :='';

END IF;

-- 执行命令 如果Sqlstr非空,执行sql表达式

IF (SqlStr<>'') THEN

SET @SQL1 = SqlStr;

PREPARE stmt1 FROM @SQL1;

EXECUTE stmt1;

END IF;

END$$

DELIMITER ;

-- 当前数据库 TableName表名 ColumnName列名

-- 新增列

-- CALL Pro_Temp_ColumnWork ('表名','字段名','字段参数 ', 1);

-- CALL Pro_Temp_ColumnWork ('表名','字段名','int(11) NULL DEFAULT NULL AFTER `xxxxxxxxxxx`; ', 1);

-- 删除列

-- CALL Pro_Temp_ColumnWork ('e_handcard_control','EntranceType','', 3);

-- 最后再执行一遍删除存储过程

DROP PROCEDURE IF EXISTS Pro_Temp_ColumnWork;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值