Мне нужно добавить определенное количество столбцов во все таблицы, начинающиеся с префикса «art _».
Если я сделаю это вручную, это займет много времени, так как у них более 100 таблиц с этим префиксом.

Могу ли я использовать процедуру для изменения всех этих таблиц? И если да, то как будет выглядеть процедура?

Спасибо заранее за любую помощь

0
Jackymamouth 11 Май 2016 в 12:31

2 ответа

Лучший ответ

Вам необходимо создать курсор в хранимой процедуре для вашего требования.

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 ;
1
marc_s 6 Окт 2016 в 12:51

Итак, вам понадобится список таблиц в массиве.

Допустим: $table_names - это массив со списком таблиц. Если у вас есть 100 файлов table. вы также можете использовать запрос, чтобы получить список имен таблиц 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
Murlidhar Fichadia 11 Май 2016 в 10:29