将列添加到以prefix开头的所有表的过程

时间:2016-05-11 09:31:13

标签: mysql

我需要在前缀为“art_”的所有表格中添加一定数量的列 如果我手动执行此操作,则需要很长时间,因为它们超过100个具有此前缀的表。

我可以使用程序修改所有这些表吗?如果是这样,程序会是什么样的?

提前感谢您的任何帮助

2 个答案:

答案 0 :(得分:1)

所以你需要一个数组中的表列表。

让我们说:$table_names是一个包含表格列表的数组。如果你有100个表。您也可以使用查询来获取表名列表select * from information_schema.tables

foreach($table_names as $table_name)
{
    ALTER TABLE '$table_name'
    ADD COLUMN `art_col1` VARCHAR(12) NOT NULL AFTER `last_col`,
    ADD COLUMN `art_col2` VARCHAR(12) NOT NULL AFTER `col1`,
    ADD COLUMN `art_col3` VARCHAR(12) UNSIGNED NOT NULL AFTER `col2`;
}

答案 1 :(得分:1)

您需要在存储过程中为您的需求创建游标。

select * 
from information_schema.tables

上面的查询将返回数据库中的所有表。

    DELIMITER $$

    CREATE PROCEDURE `addprefix`()
    BEGIN
    DECLARE r_table_name VARCHAR(50);
    DECLARE loop_end INTEGER DEFAULT 0;
    DECLARE cur1 CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = "db_name";
         DECLARE CONTINUE HANDLER FOR NOT FOUND SET loop_end = 1;
         OPEN cur1;
         rootLoop : LOOP
              FETCH cur1 INTO r_table_name;
              IF loop_end THEN
                   LEAVE rootLoop;
              END IF;
              IF SUBSTR(r_table_name,0,4) = "art_" THEN 
                  your COLUMN ADD CODE;
              END IF;
    END LOOP rootLoop;
    CLOSE cur1;
    END$$

    DELIMITER ;