MySQL使用存储过程批量更新数据库所有表某个字段值
2023-06-13 09:13:11 时间
最近响应群里朋友完整开源之前那个博客系统,准备重构一番项目的代码,对数据库中的表决定都添加 create_by、update_by、create_time、update_time、del_flag 等字段。 当时添加表的时候没有设置默认值,现在要对二三十张表某个字段,如对 del_flag 设置默认值为0,怎么做呢?一张表一张表地设置比较蠢,如何实现批量操作呢?比如查出所有的表名,然后来一个循环操作。是的,没错,可以使用存储过程。 下面是对 sens_blog 这个库的所有的表中的 del_flag 设置默认值的示例
- -- 如果存储过程存在就删除
- 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数据库基础学习(二十八)
- MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql详解数据库
- 关系MySQL:理解数据之间的依赖关系(mysql依赖)
- MySQL数据库:持续运行的利器(运行mysql数据库)
- 优化MySQL数据库空间优化:让储存更高效(mysql数据库空间)
- 指定 MySQL 数据库的指南(mysql指定数据库)
- 数据库在手机上运行MySQL数据库:简单可行!(手机上mysql)
- MySQL初始化遭遇挫折:解决错误的正确方法(mysql初始化错误)
- MySQL Open Source Database to Unlock Your Data(mysql.com)
- 注册MySQL数据库:简易指南(如何注册mysql)
- 查看MySQL数据库版本号的方法(如何查看mysql的版本)
- 构建构建基于MySQL百万级数据库(百万级mysql)
- MySQL:高效使用字节长度(mysql字节长度)
- MySQL锁表解锁:避免数据修改时出现冲突(mysql锁表解锁)
- MySQL更新时间:如何有效管理数据库中的数据更新(mysql更新时间)
- MySQL索引之聚集索引优化技术(mysql索引 聚集索引)
- MySQL测试数据库:简单快捷的稳定性分析(mysql 测试数据库)
- MySQL:让通用数据库变得更简单(mysql通用数据库类)
- slave复制原理及应用MySQL的主从复制能够实现数据备份负载均衡等功能掌握其原理和应用能助力提高数据库管理效率
- 深度解析MySQL与PS数据库的异同及优劣势(mysql_ps)
- MySQL实现两次分组计数,轻松高效统计数据(mysql两次分组计数)