2016-05-11 3 views
0

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

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

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

+0

Хотите, чтобы это сделать только с SQL или скриптом? –

+0

@BerndBuffen SQL только – Jackymamouth

+0

Можете ли вы пример того, что будет конечным результатом? как вы хотите пройти через каждую таблицу и добавить одинаковое точное количество столбцов для каждой таблицы? как это будет? если вы можете объяснить, я мог бы написать алгоритм –

ответ

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 ; 
+0

Я действительно не знаю, как это происходит. Процедуры. .. У меня ошибка: # 1193 - Неизвестная системная переменная 'loop_end' – Jackymamouth

+0

обновил мой код одним объявлением. DECLARE loop_end INTEGER DEFAULT 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`; 
} 
+0

Конечно, вам нужно сделать $ sql = запрос, который я написал в верхней части и выполнить запрос и т. Д. Обычный процесс –

+0

Ах не думал об использовании php для каждого ... Спасибо, человек – Jackymamouth

Смежные вопросы