码迷,mamicode.com
首页 > 数据库 > 详细

MySQL使用游标给指定数据库的所有表添加字段

时间:2018-06-04 14:04:35      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:code   fetch   打开   nbsp   etc   int   游标   tab   语句   

今天,主管让我在数据库的每张表都添加两个字段,数据库里有好几百张表,逐个去添加显然太费时,并且可能会出差错,例如会漏掉几张表没加的情况。

楼主想到使用游标可以轻松地解决这个问题,以下是我用mysql写的测试代码,不多说,直接上代码:

use studentcourse; 
delimiter $$
drop procedure if exists addcolumn;
create procedure addcolumn()
BEGIN
declare tablename varchar(50); #存储表名
declare str varchar(50);  #要执行的sql
declare num int;  #表数量
declare cur cursor FOR
select table_name from information_schema.tables where table_schema = studentcourse;  #定义游标并赋值所有的表名
select count(*) from information_schema.tables where table_schema = studentcourse into num; #查找该数据库的表数量
open cur;  #打开游标
while num > 0 DO  #循环
fetch cur into tablename;
set @sqlstr = concat(alter table , tablename,  add column condition2 varchar(50) not null); #使用concat拼接sql语句,注意相邻字符的拼接要留空格
prepare str from @sqlstr; #预编译
execute str;  #执行语句
DEALLOCATE PREPARE str; #释放预编译
set num = num - 1;
end while;
end $$
delimiter

call addcolumn; #调用存储过程

执行完之后,可以看到返回影响行数,不过返回的数值跟我数据库的表数量不一致。不过我查看了表结构,每张表都成功添加了这个字段。
本人是菜鸟,想将自己学习到的内容记录下来,也可以给其他人提供参考,不喜勿喷,谢谢!

 

MySQL使用游标给指定数据库的所有表添加字段

标签:code   fetch   打开   nbsp   etc   int   游标   tab   语句   

原文地址:https://www.cnblogs.com/xingna/p/9132543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!