概要 :このチュートリアルでは、SQLite NOT NULLの使用方法を学習します 列の値がNULLでないことを確認するための制約 。
SQLiteの概要NOTNULL 制約
テーブルを作成するときに、列が NULLを受け入れるかどうかを指定できます 値かどうか。デフォルトでは、テーブル内のすべての列は NULLを受け入れます NOT NULLを明示的に使用する場合を除く値 制約。
NOT NULLを定義するには 列の制約には、次の構文を使用します。
CREATE TABLE table_name (
...,
column_name type_name NOT NULL,
...
);
Code language: SQL (Structured Query Language) (sql)
PRIMARY KEYなどの他の制約とは異なります およびCHECK 、 NOT NULLのみを定義できます テーブルレベルではなく、列レベルでの制約。
SQL標準に基づいて、 PRIMARY KEY 常にNOTNULLを意味する必要があります 。ただし、SQLiteでは NULLが許可されています PRIMARY KEYの値 列がINTEGERPRIMARY KEYであることを除いて列 列またはテーブルがWITHOUTROWID テーブルまたは列はNOTNULLとして定義されています 列。
これは、一部の初期バージョンのバグが原因です。このバグがSQL標準に準拠するように修正されている場合、レガシーシステムが破損する可能性があります。したがって、 NULLを許可することが決定されました PRIMARY KEYの値 列。
一度NOTNULL 制約が列に付加され、列の値を NULLに設定しようとすると 挿入や更新などにより、制約違反が発生します。
SQLite NOT NULL 制約の例
次の例では、 supplyerという名前の新しいテーブルを作成します :
CREATE TABLE suppliers(
supplier_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
この例では、 supply_id PRIMARY KEYです サプライヤーの列 テーブル。この列はINTEGERPRIMARY KEYとして宣言されているためです 、 NULLは受け入れられません 値。
名前コード> 列もNOTNULLで宣言されます 制約があるため、NULL以外の値のみを受け入れます。
次のステートメントは、 NULLを挿入しようとしています nameに サプライヤーの列 テーブル:
INSERT INTO suppliers(name)
VALUES(NULL);
Code language: SQL (Structured Query Language) (sql)
NOT NULL が原因で、ステートメントが失敗します 制約違反。エラーメッセージは次のとおりです。
SQL Error [19]: [SQLITE_CONSTRAINT] Abort due to constraint violation (NOT NULL constraint failed: suppliers.name)Code language: CSS (css)
このチュートリアルでは、SQLite NOT NULLの使用方法を学習しました 列の値がNULLでないことを保証するための制約。