mysql创建存储过程实现往数据表中新增字段的方法分析
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法。分享给大家供大家参考,具体如下:需求:往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作;若该字段不存在,则新增)百度了n久
千家信息网最后更新 2025年01月20日mysql创建存储过程实现往数据表中新增字段的方法分析
本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法。分享给大家供大家参考,具体如下:
需求:
往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作;若该字段不存在,则新增)
百度了n久,没有符合要求的例子,只有参考加自己琢磨,最终终于给弄出来了,以下是几个版本的更迭
第一版:
DELIMITER $$CREATE PROCEDURE insert_column()BEGINIF NOT EXISTS(SELECT 1 FROM information_schema.columnsWHERE table_schema='ltivalley' AND table_name='t_luck'AND column_name='sss' ) THENalter 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 FROMinformation_schema.columns WHERE table_schema=",dbname,"AND table_name=",tbname," AND column_name=",colname,")THENalter 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))BEGINSET @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;)THENEXECUTE 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))BEGINset @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)THENEXECUTE addcol;END IF;END$$DELIMITER ;
最终的结果,先执行EXECUTE selec
,将结果存放到一个变量@iscolexists
中,然后再在IF()
中判断@iscolexists
的值,做相应操作。可用!
更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL存储过程技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》及《MySQL数据库锁相关技巧汇总》
希望本文所述对大家MySQL数据库计有所帮助。
过程
存储
字段
数据
技巧
数据库
中新
原因
大全
是在
结果
语句
参考
数据表
方法
专题
事务
例子
兴趣
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全证书无效怎么解决
互联网科技行业节目
xp的代理服务器
松江区定制软件开发推荐咨询
vc实现汽车保养数据库
牡丹江招聘软件开发
潍坊知客网络技术有限公司
王者荣耀苹果服务器怎么转安卓
黑客攻击企业服务器是否犯罪
寻甸专业性软件开发价格信息
金融行业国产数据库有哪些
视频聊天经过服务器
360服务器安全卫士
网络安全策略设计流程
软件开发 费用预测
蓟州区企业网络技术创造辉煌
恩施服务器回收免费咨询
广州超越科技互联网有限公司
国企软件开发怎么样
诺达网络技术有限公司
数据库怎么表示总分
地税局网络安全周 简报
数据库中通配符_是什么
超凡搜索连不上服务器解决办法
无锡智能软件开发培训
歌华不能连接服务器
亿联网络技术分析
比亚迪嵌入式软件开发工程师
当今网络安全产业前景
职业软件开发报价