web-dev-qa-db-ja.com

MySQL:存在しない場合、どのように列を作成しますか?

テーブルが存在しない場合にのみ、テーブルの列を作成しようとしています。私は多くのことを研究しましたが、まだ解決策を見つけることができませんでした。

これは条件付きで列を作成することは本当に可能ですか?

13
zzzzz

MySQL ALTER TABLE 持っていない IF EXISTS仕様。

定期的に行う必要がある場合は、ストアドプロシージャまたはプログラミング言語を使用して次のことを実行できます。

疑似コード:

  • 以下のSQLを使用して、列が存在するかどうかを確認します。

    選択する column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = [データベース名] AND TABLE_NAME = [テーブル名];

  • 上記のクエリが結果を返す場合は、列が存在することを意味します。それ以外の場合は、先に進んで列を作成できます。

7
thatsaru

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);
13
Paroofkey

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;
6
Anto Jose

これは私のために働きました:

    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;
1
Tejpal Sharma