SQLiteでは、ALTER TABLE
を使用できます 既存のテーブルに列を追加するステートメント。
これは、実際にはALTER TABLE
で実行できる数少ないことの1つです。 SQLiteのステートメント。 ALTER TABLE
でできることは SQLiteのステートメントは、テーブルの名前を変更し、列の名前を変更し、既存のテーブルに新しい列を追加することです。
例1
次の表があるとします。
CREATE TABLE Cats(
CatId INTEGER PRIMARY KEY,
CatName
);
次に、 DOBという列を追加します。 。次のコードを使用してそれを行うことができます:
ALTER TABLE Cats ADD COLUMN DOB;
それと同じくらい簡単です。
制限
制約などの他の仕様を定義に提供することもできますが、いくつかの制限があります。
特に:
- 新しい列に
PRIMARY KEY
を含めることはできません またはUNIQUE
制約。 - 新しい列のデフォルト値を
CURRENT_TIME
にすることはできません 、CURRENT_DATE
、CURRENT_TIMESTAMP
、または括弧内の式。 -
NOT NULL
の場合 制約が指定されている場合、列にはNULL
以外のデフォルト値が必要です。 。 - 外部キー制約が有効で、
REFERENCES
の列がある場合 句が追加された場合、列のデフォルト値はNULL
である必要があります 。 - 新しい列が生成された列の場合、
STORED
にすることはできません 桁。VIRTUAL
にすることができます コラムですが。
例2
別の例を次に示します。今回は、新しい列の定義にさらにいくつかの仕様を追加します。
CREATE TABLE Dogs(
DogId INTEGER PRIMARY KEY,
DogName
);
次に、 DOBという列を追加します。 。次のコードを使用してそれを行うことができます:
ALTER TABLE Dogs
ADD COLUMN Score NOT NULL DEFAULT 0;
変更を確認する
SQLiteでテーブルの構造をチェックする方法はいくつかあります。
1つの方法は、PRAGMA table_info()
を使用することです。 ステートメント。
PRAGMA table_info(Dogs);
結果:
cid name type notnull dflt_value pk --- ------- ------- ---------- ---------- -- 0 DogId INTEGER 0 1 1 DogName 0 0 2 Score 1 0 0
新しい列が表示され、NOT NULL
があることがわかります。 制約があり、デフォルト値は 0 。