mysql创建存储过程实现往数据表中新增字段的方法
网络编程 2021-07-05 14:37www.168986.cn编程入门
这篇文章主要介绍了mysql创建存储过程实现往数据表中新增字段的方法,结合实例形式对比分析了通过存储过程新增字段相关操作技巧,需要的朋友可以参考下
本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法。分享给大家供大家参考,具体如下
需求
往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作;若该字段不存在,则新增)
百度了n久,没有符合要求的例子,只有参考加自己琢磨,最终终于给弄出来了,以下是几个版本的更迭
第一版
DELIMITER $$ CREATE PROCEDURE insert_column() BEGIN IF NOT EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema='ltivalley' AND table_name='t_luck' AND column_name='sss' ) THEN alter table ltivalley.t_luck add sss varchar(255) not Null; end if; END $$ DELIMITER ;
此存储过程可以做到往ltivalley数据库的t_luck表中新增一个sss的字段,但写死了,毫无灵活性,故没用!
第二版
DELIMITER $$ CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255)) set @sql_1= concat("IF NOT EXISTS(SELECT 1 FROM information_schema.columns WHERE table_schema=",dbname," AND table_name=",tbname," AND column_name=",colname,") THEN alter table ",dbname,".",tbname," add ",colname," varchar(255) not null; end if;"); PREPARE stmt FROM @sql_1; EXECUTE stmt; DEALLOCATE PREPARE stmt; END $$ DELIMITER ;
创建存储过程没有问题,但当调用的时候就会出错,报 "IF"左右出错,原因是在mysql中IF只能存在于存储过程中,此处用EXECUTE stmt来执行,等于是不在存储过程里面执行if语句,所以报错,执行不了!故没用!
第三版
DELIMITER $$ CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255)) BEGIN SET @selec=CONCAT('SELECT 1 FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"'); PREPARE selec FROM @selec; SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)'); PREPARE addcol FROM @addcol; IF NOT EXISTS(EXECUTE selec;)THEN EXECUTE addcol; END IF; END $$ DELIMITER ;
无法创建存储过程,原因是在IF NOT EXISTS()中,不能执行EXECUTE selec语句,原因未知。故没用!
终极版
DROP PROCEDURE IF EXISTS insert_column; DELIMITER $$ CREATE PROCEDURE insert_column(in dbname varchar(255),in tbname varchar(255),in colname varchar(255)) BEGIN set @iscolexists = 0; SET @selec=CONCAT('SELECT count() into @iscolexists FROM information_schema.columns WHERE table_schema="',dbname,'" AND table_name="',tbname,'" AND column_name="',colname,'"'); PREPARE selec FROM @selec; EXECUTE selec; DEALLOCATE PREPARE selec; SET @addcol=CONCAT('ALTER TABLE ',dbname,'.',tbname,' ADD ',colname,' VARCHAR(255)'); PREPARE addcol FROM @addcol; IF(@iscolexists=0)THEN EXECUTE addcol; END IF; END $$ DELIMITER ;
最终的结果,先执行EXECUTE selec
,将结果存放到一个变量@iscolexists
中,然后再在IF()
中判断@iscolexists
的值,做相应操作。可用!
更多关于MySQL相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》及《》
希望本文所述对大家MySQL数据库计有所帮助。
上一篇:MySQL自定义函数简单用法示例
下一篇:MySQL实例crash的案例详细分析
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程