MySQLでは、IF NOT EXISTS
を使用できます CREATE TABLE
の句 同じ名前のテーブルがデータベースにすでに存在するかどうかを確認するステートメント。
テーブルが存在しない場合は作成されます。すでに存在する場合、作成されません。
例
次のようになります:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
ここでt1
はテーブル名であり、括弧内はすべてテーブル定義(つまり、列など)です。
その場合、テーブルはt1
という名前のテーブルがまだない場合にのみ作成されます。 。
テーブルが存在することを確認します
sys.table_exists()
を使用できます テーブルが現在存在するかどうかを確認する手順:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
結果:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
ここでは、test
はデータベースの名前であり、t1
存在を確認しているテーブルの名前です。
この場合、結果はBASE TABLE
になります。 これは、テーブルが存在することを意味します。
これは、MySQLにテーブルが存在するかどうかを確認する多くの方法の1つにすぎません。
テーブルをもう一度作成してみてください
ここで、そのテーブルを再度作成しようとすると:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
エラーは発生しません:
Query OK, 0 rows affected, 1 warning (0.00 sec)
しかし、警告が表示されます。
それでは、警告を確認しましょう:
SHOW WARNINGS;
結果:
+-------+------+---------------------------+ | Level | Code | Message | +-------+------+---------------------------+ | Note | 1050 | Table 't1' already exists | +-------+------+---------------------------+
予想どおり、テーブルはすでに存在していることがわかります。
IF NOT EXISTS
なし 条項
IF NOT EXISTS
を使用しない場合は次のようになります すでに存在するテーブルを作成しようとするときの句:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
今回はエラーが発生します:
ERROR 1050 (42S01): Table 't1' already exists
IF NOT EXISTS
に注意することが重要です 句はテーブルの構造/定義をチェックしません。作成しているテーブルに付けようとしているのと同じ名前の既存のテーブルがないことを確認するだけです。
つまり、その名前のテーブルがすでに存在しているからといって、それが正しい定義を持っているとは限りません。