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

MariaDBに存在しない場合にのみテーブルを作成する

    MariaDBでは、IF NOT EXISTSを使用できます CREATE TABLEの句 作成する前に、同じ名前のテーブルがデータベースにすでに存在するかどうかを確認するステートメント。

    テーブルは、同じ名前のテーブルがまだない場合にのみ作成されます。

    デモンストレーションの例を次に示します。

    CREATE TABLE IF NOT EXISTS t1 (
      c1 INT,
      c2 VARCHAR(10)
    );

    ここでは、t1 はテーブル名であり、括弧内はすべてテーブル定義(つまり、列など)です。

    その場合、テーブルはt1という名前のテーブルがまだない場合にのみ作成されます。 。

    テーブルが存在することを確認します

    information_schema.tablesにクエリを実行できます テーブルが現在存在するかどうかを確認するためのテーブル:

    SELECT EXISTS (
        SELECT 
            TABLE_NAME
        FROM 
        information_schema.tables 
        WHERE 
        TABLE_SCHEMA LIKE 'zap' AND 
            TABLE_TYPE LIKE 'BASE TABLE' AND
            TABLE_NAME = 't1'
        );

    結果:

    1

    ここでは、zap はデータベースの名前であり、t1 存在を確認しているテーブルの名前です。

    1 テーブルが存在することを意味します。存在しなかった場合は、0を取得します 。

    テーブルをもう一度作成してみてください

    ここで、そのテーブルを再度作成しようとすると:

    CREATE TABLE IF NOT EXISTS t1 (
      c1 INT,
      c2 VARCHAR(10)
    );

    エラーは発生しません:

    Query OK, 0 rows affected, 1 warning (0.002 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. Postgresql forC++でステートメントとバインドパラメータを準備する方法

    2. PDO例外を処理する方法

    3. パージしないことの価格

    4. SQL Serverに座標(経度/緯度、Googleマップから)を保存するための最良の方法は何ですか?