SQLiteでは、IF NOT EXISTS
を使用できます CREATE TABLE
の句 作成する前に、同じ名前のテーブルまたはビューがデータベースにすでに存在するかどうかを確認するステートメント。
この句を指定せずにテーブルを作成すると、同じ名前のテーブルがデータベースにすでに存在する場合、通常はエラーが発生します。ただし、IF NOT EXISTS
を使用する場合 句、同じ名前のテーブルがすでに存在する場合、ステートメントは効果がありません。
例
デモンストレーションの例を次に示します。
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
ここでは、t1
はテーブル名であり、括弧内はすべてテーブル定義(つまり、列など)です。
その場合、テーブルはt1
というテーブルまたはビューがまだない場合にのみ作成されます。 。
テーブルが存在することを確認します
sqlite_schema
にクエリを実行できます テーブルが現在存在するかどうかを確認するためのテーブル:
SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
結果:
1
この場合、1
を取得します 、これはテーブルが存在することを意味します。
テーブルをもう一度作成してみてください
そのテーブルを再度作成しようとすると:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
エラーは発生しません:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
何も得られません。
IF NOT EXISTS
なし 条項
IF NOT EXISTS
を使用しない場合は次のようになります すでに存在するテーブルを作成しようとするときの句:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
今回はエラーが発生します:
Error: table t1 already exists
IF NOT EXISTS
に注意してください 句はテーブルの構造/定義をチェックしません。作成しているテーブルに付けようとしているのと同じ名前の既存のテーブルまたはビューがないことを確認するだけです。
言い換えれば、その名前のテーブルがすでに存在しているからといって、それが正しい定義を持っているという意味ではありません。
また、IF NOT EXISTS
であっても、既存のインデックスが原因でテーブルを作成できない場合は、エラーが返されます。 句が指定されています。