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

我就上乐乐吧

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

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

本站收集各类美图,以无LOGO原汁原味图为主!欢迎大家交流。
怕失联,请认准如下地址:
微博:http://weibo.com/237h
微信:SuperBeautylove
轻博客:http://www593668com.lofter.com/
花瓣:http://huaban.com/sinsunson
Q群号:231151757
网站:http://www.593668.com
文件解压密码:593668.com
去广告插件adblock plus安装参考:网盘下载帮助点击
网盘下载帮助请参看:网盘下载帮助点击
热心赞助

站内搜索
 
相关文章
热门文章
热搜词组
文章归档
友情链接
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