sql >> データベース >  >> RDS >> Mysql

MySQLでテーブルを作成する前にテーブルがすでに存在するかどうかを確認する方法

    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に注意することが重要です 句はテーブルの構造/定義をチェックしません。作成しているテーブルに付けようとしているのと同じ名前の既存のテーブルがないことを確認するだけです。

    つまり、その名前のテーブルがすでに存在しているからといって、それが正しい定義を持っているとは限りません。


    1. MySQLでのLOAD_FILE()関数のしくみ

    2. PL / SQLのファイルからBLOBを取得する方法は?

    3. postgresでテーブル(インデックスを含む)をコピーします

    4. 行androidを更新するSqliteデータベース