接頭辞「art_」で始まるすべての表に一定量の列を追加する必要があります。
これを手動で行う場合、この接頭辞を持つ100を超えるテーブルがあるため、時間がかかります。接頭辞で始まるすべての表に列を追加する手順
これらのテーブルをすべて変更する手順を使用できますか?もしそうなら、手続きはどのように見えますか?
ご協力いただきありがとうございます。
接頭辞「art_」で始まるすべての表に一定量の列を追加する必要があります。
これを手動で行う場合、この接頭辞を持つ100を超えるテーブルがあるため、時間がかかります。接頭辞で始まるすべての表に列を追加する手順
これらのテーブルをすべて変更する手順を使用できますか?もしそうなら、手続きはどのように見えますか?
ご協力いただきありがとうございます。
あなたはあなたの条件のために、ストアドプロシージャにカーソルを作成する必要があるテーブル名のリストを取得するクエリを使用することができます。
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 ;
私は実際に手続きについて私の方法を知らない。 .. エラーが発生しました: #1193 - 不明なシステム変数 'loop_end' – Jackymamouth
は、1つのdeclareステートメントで自分のコードを更新しました.. DECLARE loop_end INTEGER DEFAULT 0; –
テーブルのリストが必要です。
そう言えば、$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`;
}
ofcourseあなたは$ sqlを実行する必要があります=私はトップに書いたクエリなどを実行します。通常のプロセス –
ああ、それぞれについてPHPを使うとは思わなかった...ありがとうございました – Jackymamouth
SQLのみまたはシェルスクリプトでやりたいですか? –
@BerndBuffen SQLのみ – Jackymamouth
最終的な出力はどのようなものでしょうか?あなたは各テーブルをループし、各テーブルの同じ正確な列数を追加したいのですか?どのようになるだろうか?あなたがアルゴリズムを書くことができると私が説明することができる場合 –