水平分表后需要批量操作表字段,一个一个去修改太笨太慢,因此研究了下面的运用存储过程来平凉操作。不多说直接上代码:
DROP PROCEDURE IF EXISTS proc_tempPro;#首先判断是否声明了此名称的存储过程 CREATE PROCEDURE proc_tempPro();#声明存储过程 BEGIN DECLARE i INT;#定义变量 SET i=1;#变量赋值 SET @mtotal=0;#定义用户变量并赋值 SELECT COUNT(*) INTO @mtotal FROM `user` WHERE 1;#查询用户表的用户数并赋值给自定义的变量 SELECT @mtotal;#输出变量 ##循环操作水平分表 WHILE i<=@mtotal DO SET @tm = CONCAT('log',i);#拼接表名 ##判断字段是否存在 IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.`COLUMNS` WHERE table_schema= DATABASE() AND table_name=@tm AND column_name='guestlog_user_agent') THEN #拼接操作字段语句 SET @atd = CONCAT('ALTER TABLE ',@tm,' DROP `user_agent`;'); SELECT @atd; PREPARE catd FROM @atd;#预处理语句 EXECUTE catd;#执行语句 end if; SET i = i+1; END WHILE; END
评论 (0)