mysql创建存储过程实现往数据表中新增字段的方法分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文实例讲述了mysql创建存储过程实现往数据表中新增字段的方法。分享给大家供大家参考,具体如下:需求:往某数据库的某个表中新增一个字段(若该字段已存在,则不做操作;若该字段不存在,则新增)百度了n久
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
和虚拟机一样的服务器
几种常用的应用服务器教案
怀旧服开服服务器时间表
城口软件开发机构
网络安全问题手抄报图片
象山存储服务器
软件怎么修改数据库
太原软件开发亚马逊
软件开发的生命周期模型中
路由器创建vpn服务器
网络安全知识 小学
论文评语 软件开发
网络安全法 金杜
所有云服务器
大专学网络技术有前途吗
山东最好服务器虚拟主机
企业网站 数据库设计
服务器安装什么软件管理
怎么查看本机的服务器ip地址
学生网络技术开发价值
开原租房软件开发
山东商业软件开发定制价格
磁盘清理后出现音频服务器未开启
数据同步 数据库
辽宁省导师数据库平台
as和数据库怎么联系起来
网络为什么总是不能连接服务器
迈科集团网络安全项目
linux文件共享服务器
卸载数据库提示26003