今天有一个需求,对库里指定的一些表进行字段的添加,因为库里这些表是属于同一张表,只不过按照日期对表进行了拆分,变成了ytx_qrcode_order_01,ytx_qrcode_order_02,ytx_qrcode_order_03这样的,所以需要新增的字段每个表里都需要添加,在这里有2种方式可以实现
第一种方式:获取一个可以执行的结果集,然后执行这个结果集的语句进行添加.
首先应该先把结果集的长度修改一下,因为如果表很多的话,会装不下,修改语句为:SET SESSION group_concat_max_len = 10240;
接下来就是:
SELECT
GROUP_CONCAT('alter table ', table_schema, '.', table_name, ' add column platform_code varchar(50);' SEPARATOR "") -- 需要添加的字段通过拼接得到可执行的sql语句
FROM information_schema.tables WHERE
table_schema='库名' AND table_name LIKE 'ytx_qrcode_order%'; -- 查询库名下面以ytx_qrcode_order作为开头的表作为条件
然后把这个结果集复制,执行即可。
第二种方式:通过存储过程的方式
DROP PROCEDURE IF EXISTS testEndHandle;
DELIMITER $$
CREATE PROCEDURE testEndHandle()
BEGIN
DECLARE s_tablename VARCHAR(100);
#查询dcsbus库下面ytx_qrcode_order开头的表
DECLARE cur_table_structure CURSOR
FOR
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'dcsbus' AND table_name LIKE "ytx_qrcode_order%";
#异常声明返回的状态码
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s_tablename = NULL;
OPEN cur_table_structure;
FETCH cur_table_structure INTO s_tablename;
WHILE ( s_tablename IS NOT NULL) DO
SET @MyQuery=CONCAT("alter table `",s_tablename,"` add COLUMN `platform_code` varchar(50) COMMENT '平台CODE'");
PREPARE msql FROM @MyQuery;
EXECUTE msql ;#USING @c;
FETCH cur_table_structure INTO s_tablename;
END WHILE;
CLOSE cur_table_structure;
END;
$$
#执行存储过程
CALL testEndHandle();