• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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数据库计有所帮助。

    您可能感兴趣的文章:
    • Mysql中批量替换某个字段的部分数据(推荐)
    • mysql 替换字段部分内容及mysql 替换函数replace()
    • mysql查询字段类型为json时的两种查询方式
    • MySQL group by对单字分组序和多字段分组的方法讲解
    • MySQL中可为空的字段设置为NULL还是NOT NULL
    • MySQL中字段类型char、varchar和text的区别
    • MySQL根据某一个或者多个字段查找重复数据的sql语句
    • 简单了解mysql存储字段类型查询效率
    上一篇:MySQL实例crash的案例详细分析
    下一篇:MySQL自定义函数简单用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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