mysql创建存储过程实现往数据表中新增字段的方法分析

 更新时间:2018年12月27日 12:02:18   作者:菜鸟学编程$  
这篇文章主要介绍了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日志操作技巧大全》、《MySQL事务操作技巧汇总》及《MySQL数据库锁相关技巧汇总

希望本文所述对大家MySQL数据库计有所帮助。

相关文章

  • centos7利用yum安装mysql 8.0.12

    centos7利用yum安装mysql 8.0.12

    这篇文章主要为大家详细介绍了centos7利用yum安装mysql 8.0.12,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • MySQL手动注册binlog文件造成主从异常的原因

    MySQL手动注册binlog文件造成主从异常的原因

    这篇文章主要介绍了MySQL手动注册binlog文件造成主从异常的原因,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-10-10
  • 解析MySQL8.0新特性——事务性数据字典与原子DDL

    解析MySQL8.0新特性——事务性数据字典与原子DDL

    这篇文章主要介绍了MySQL8.0新特性——事务性数据字典与原子DDL的相关资料,帮助大家更好的理解和学习MySQL8.0感兴趣的朋友可以了解下
    2020-08-08
  • 一文搞懂什么是MySQL前缀索引

    一文搞懂什么是MySQL前缀索引

    所谓前缀索引,说白了就是对文本的前几个字符建立索引,有点类似于 Oracle 中对字段使用 Left 函数来建立函数索引,只不过 MySQL 的这个前缀索引在查询时是内部自动完成匹配的。本文将通过示例详细聊聊前缀索引,需要的可以参考一下
    2022-09-09
  • Mysql数据库清理binlog日志命令详解

    Mysql数据库清理binlog日志命令详解

    这篇文章主要给大家介绍了Mysql数据库清理binlog日志命令的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • 详解MySQL索引原理以及优化

    详解MySQL索引原理以及优化

    在本篇文章中小编给大家整理了关于MySQL索引原理以及优化的相关知识点以及实例代码,需要的朋友们参考下。
    2019-06-06
  • 关于MySQL中的查询开销查看方法详解

    关于MySQL中的查询开销查看方法详解

    一个查询通常可以有很多种执行方式,并且返回同样的结果,而好的程序员应该是找到最好的方式,下面这篇文章主要给大家介绍了关于MySQL中查询开销查看方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-07-07
  • MySQL 数据库的约束及数据表的设计原理

    MySQL 数据库的约束及数据表的设计原理

    这篇文章主要介绍了MySQL 数据库的约束及数据表的设计原理,数据库中的约束即是对插入数据库中的数据进行限定,为了保证数据的有效性和完整性,下面一起来了解具体的详细内容,需要的小伙伴可以参考一下
    2021-12-12
  • 在IDEA的maven项目中连接并使用MySQL8.0的方法教程

    在IDEA的maven项目中连接并使用MySQL8.0的方法教程

    这篇文章主要介绍了如何在IDEA的maven项目中连接并使用MySQL8.0,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • MySQL实现查询数据库表记录数

    MySQL实现查询数据库表记录数

    这篇文章主要介绍了MySQL实现查询数据库表记录数,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论