当前位置:Gxlcms > 数据库问题 > MySQL使用存储过程批量更新数据库所有表某个字段值

MySQL使用存储过程批量更新数据库所有表某个字段值

时间:2021-07-01 10:21:17 帮助过:12人阅读

  • DROP PROCEDURE IF EXISTS updateColumn;
  • CREATE PROCEDURE updateColumn()
  • BEGIN
  • -- 定义循环条件
  • DECLARE flag INT DEFAULT 0;
  • -- 保存表名
  • DECLARE tname VARCHAR(50);
  • -- 查询数据库sens_blog中含有del_flag列的表,如果区分大小写使用binary COLUMN_NAME = ‘del_flag‘
  • DECLARE result CURSOR FOR SELECT TABLE_NAME FROM  INFORMATION_SCHEMA.Columns WHERE TABLE_SCHEMA = ‘sens_blog‘ AND  COLUMN_NAME = ‘del_flag‘;
  • -- 退出循环
  • DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000‘ SET flag = 1;
  • -- 打开游标
  • OPEN result;
  •     WHILE flag <> 1 DO
  •     -- 游标指向下一个位置,可以有多个数据,比如FETCH result INTO tname,ttype,...;
  •     FETCH result INTO tname;
  •         -- 拼接字符串表名sql,根据需要使用CONCAT函数连接
  •         -- 批量设置所有表的为del_flag字段0
  •         -- SET @execSql = CONCAT(‘UPDATE ‘, tname, ‘ SET del_flag = 0‘); 
  •                 -- 批量设置所有表的为del_flag字段默认值为0
  •                 SET @execSql = CONCAT(‘ALTER TABLE  ‘, tname, ‘ ALTER COLUMN del_flag SET DEFAULT  0‘);
  •         PREPARE stmt FROM @execSql;
  •         EXECUTE stmt;
  •     END WHILE;
  • END;
  • -- 调用存储过程更新数据
  • CALL updateColumn();
  •   技术图片

    如果你想做其他的操作,只需要修改22行,改成你的SQL语句就行,当然数据库名和字段名也要改。

    MySQL使用存储过程批量更新数据库所有表某个字段值

    标签:into   sel   png   concat   where   width   prepare   循环条件   cursor   

    人气教程排行