收藏本页|设为主页|RSS
LOGO

我就上乐乐吧

MySQL批量修改库中所有表技术杂萃 苦逼码农的点点滴滴,请多多指教!我就上乐乐吧资源的世界,资源的海洋,收集各类资源,以无LOGO原汁原味为主!欢迎大家交流。智者乐山,仁者乐水,独乐乐,不如众乐乐,乐山,乐水,乐天,乐地,乐乐吧,乐于...

您当前的位置:首页»技术杂萃
全站公告
重要提示!

本站收集各类美图,以无LOGO原汁原味图为主!欢迎大家交流。
怕失联,请认准如下地址:
微博:http://weibo.com/237h
微信:SuperBeautylove
轻博客:http://www593668com.lofter.com/
花瓣:http://huaban.com/sinsunson
Q群1:231151757
Q群2:583138281
网站:http://www.593668.com
文件解压密码:593668.com
热心赞助

站内搜索
 
相关文章
热门文章
热搜词组
文章归档
友情链接
    MySQL批量修改库中所有表

    发布日期:2019-05-15  关键词:MySQL

    项目因为历史原因,MySQL数据库有很多表并不规范,当然只要系统稳定运行,也没有特别的想法。这不,最近又因公司新规定,MySQL版本要升到5.7,每个表都要有如下两个标准字段:

    `optime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
    `uptime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

    当然手工一个个去加也是可以,不过因为库中表数量众多,这样劳累还是不成,想了想,还是写代码来更新吧。

    搜了搜网上的资料,有相应的代码,比如利用存储过程。

    DELIMITER $$

    DROP PROCEDURE IF EXISTS `update_all_tables`$$
    CREATE PROCEDURE `update_all_tables`(IN dbname VARCHAR(50))
      BEGIN
        DECLARE done INT DEFAULT 0;
        DECLARE cur VARCHAR(200);
        DECLARE tbs_list CURSOR FOR SELECT TABLE_NAME FROM inforMATion_schema.`TABLES` WHERE TABLE_Schema = dbname;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        OPEN tbs_list;
        REPEAT
          FETCH tbs_list INTO cur;
          IF NOT done THEN
             SET @_SQL = CONCAT("ALTER TABLE `",cur,"` ADD COLUMN `optime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',ADD COLUMN `uptime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'");
             PREPARE stmt FROM @_SQL ;
             EXECUTE stmt ;
             DEALLOCATE PREPARE stmt;
         END IF;
        UNTIL done END REPEAT;
        CLOSE tbs_list;
    END$$

    DELIMITER ;

    CALL update_all_tables("www.593668.com";);#这里的库名请自行切换

    执行结果如下:

    MySQL批量修改库中所有表,MySQL,技术杂萃

    非常完美,可惜总是有点感觉这里还是有点繁琐了,而且万一,并没有数据库创建存储过程权限的话,那就有点坐蜡了。所以还提供另外一种办法,直接生成SQL语句。

    SET @@GROUP_CONCAT_MAX_LEN = 1024000;  #这里一定要设置下,不然库中表多的话,就会被截断
    SELECT @sql:=GROUP_CONCAT(b.a,"\r\n" SEPARATOR "") FROM (SELECT
      CONCAT(
        "ALTER TABLE `",
        table_name,
        "` ADD COLUMN `optime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',ADD COLUMN `uptime` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间';"
      ) AS a
    FROM
      inforMATion_schema.TABLES
    WHERE table_schema = 'www.593668.com' ) b;

    输出的结果就是可以执行的SQL,把这些代码复制出来,直接执行就可以。当然,这里的SQL语句还可以自行调整,这样批量操作表就都不是问题了。
    猜您喜欢:
    Q群:231151757微信:superimagelove官网:www.593668.com