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

SQLiteNOTNULL制約

    概要 :このチュートリアルでは、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でないことを保証するための制約。


    1. Oracleデータベース列の特定の値を置き換える方法は?

    2. カーソルを返すOracleストアドプロシージャでのDapperの使用

    3. Postgresデータ型NUMERICは符号付きの値を保存できますか?

    4. 一度に複数の値をpostgresテーブルに挿入するにはどうすればよいですか?