テーブルが存在しない場合にのみ、テーブルの列を作成しようとしています。私は多くのことを研究しましたが、まだ解決策を見つけることができませんでした。
これは条件付きで列を作成することは本当に可能ですか?
MySQL ALTER TABLE
持っていない IF EXISTS
仕様。
定期的に行う必要がある場合は、ストアドプロシージャまたはプログラミング言語を使用して次のことを実行できます。
疑似コード:
以下のSQLを使用して、列が存在するかどうかを確認します。
選択する column_name
FROM INFORMATION_SCHEMA
.COLUMNS
WHERE TABLE_SCHEMA
= [データベース名] AND TABLE_NAME
= [テーブル名];
上記のクエリが結果を返す場合は、列が存在することを意味します。それ以外の場合は、先に進んで列を作成できます。
Maria DB 10.219には現在存在しています
ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);
ボーナス、MODIFYでも機能します
ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);
StackOverFlowの別の投稿で既に言及されているこのソリューションを使用できます:(参照: https://stackoverflow.com/a/31989541/ )
MySQL-列が存在しない場合に列を追加するためのALTER TABLE:
SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
(
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
WHERE
(table_name = @tablename)
AND (table_schema = @dbname)
AND (column_name = @columnname)
) > 0,
"SELECT 1",
CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
これは私のために働きました:
SELECT count(*)
INTO @exist
FROM information_schema.columns
WHERE table_schema = 'mydatabase'
and COLUMN_NAME = 'mycolumn'
AND table_name = 'mytable' LIMIT 1;
set @query = IF(@exist <= 0, 'ALTER TABLE mydatabase.`mytable` ADD COLUMN `mycolumn` MEDIUMTEXT NULL',
'select \'Column Exists\' status');
prepare stmt from @query;
EXECUTE stmt;