MySQL使⽤存储过程批量更新数据库所有表某个字段值
最近响应⾥朋友完整开源之前那个博客系统,准备重构⼀番项⽬的代码,对数据库中的表决定都添加 create_by、update_by、create_time、update_time、del_flag 等字段。
当时添加表的时候没有设置默认值,现在要对⼆三⼗张表某个字段,如对 del_flag 设置默认值为0,怎么做呢?⼀张表⼀张表地设置⽐较蠢,如何实现批量操作呢?⽐如查出所
有的表名,然后来⼀个循环操作。是的,没错,可以使⽤存储过程。下⾯是对 sens_blog 这个库的所有的表中的 del_flag 设置默认值的⽰例
1. -- 如果存储过程存在就删除
2. DROP PROCEDURE IF EXISTS updateColumn;
3. CREATE PROCEDURE updateColumn()
4. BEGIN
5. -- 定义循环条件
系统架构师pdf
6. DECLARE flag INT DEFAULT 0;
7. -- 保存表名
8. DECLARE tname VARCHAR(50);
9. -- 查询数据库sens_blog中含有del_flag列的表,如果区分⼤⼩写使⽤binary COLUMN_NAME = 'del_flag'
10. DECLARE result CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_SCHEMA = 'sens_blog' AND COLUMN_NAME = 'del_flag';
11. -- 退出循环自学android软件开发
12. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET flag = 1;
13. -- 打开游标
mysql查看所有存储过程14. OPEN result;
15. WHILE flag <> 1 DO
16. -- 游标指向下⼀个位置,可以有多个数据,⽐如FETCH result INTO tname,ttype,...;
17. FETCH result INTO tname;
18. -- 拼接字符串表名sql,根据需要使⽤CONCAT函数连接
19. -- 批量设置所有表的为del_flag字段0
计算机内部属于什么进制20. -- SET @execSql = CONCAT('UPDATE ', tname, ' SET del_flag = 0');
21. -- 批量设置所有表的为del_flag字段默认值为0二进制转换为十进制小数点
22. SET @execSql = CONCAT('ALTER TABLE ', tname, ' ALTER COLUMN del_flag SET DEFAULT 0');
23. PREPARE stmt FROM @execSql;
24. EXECUTE stmt;
25. END WHILE;
26. END;
27. -- 调⽤存储过程更新数据
28. CALL updateColumn();
mysql怎么查看视图的表结构
如果你想做其他的操作,只需要修改22⾏,改成你的SQL语句就⾏,当然数据库名和字段名也要改。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论