2016-05-11 9 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

は、1つのdeclareステートメントで自分のコードを更新しました.. DECLARE loop_end INTEGER DEFAULT 0; –

1

テーブルのリストが必要です。

そう言えば、$table_namesはテーブルのリストを持つ配列です。もし100sのテーブルがあれば。あなたも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

ofcourseあなたは$ sqlを実行する必要があります=私はトップに書いたクエリなどを実行します。通常のプロセス –

+0

ああ、それぞれについてPHPを使うとは思わなかった...ありがとうございました – Jackymamouth

関連する問題