sql >> Databasteknik >  >> RDS >> SQLite

SQLite NOT NULL-begränsning

Sammanfattning :i denna handledning lär du dig hur du använder SQLite NOT NULL begränsning för att säkerställa att värdena i en kolumn inte är NULL .

Introduktion till SQLite NOT NULL begränsning

När du skapar en tabell kan du ange om en kolumn accepterarNULL värden eller inte. Som standard accepterar alla kolumner i en tabell NULL värden förutom att du uttryckligen använder NOT NULL begränsningar.

För att definiera en NOT NULL begränsning för en kolumn använder du följande syntax:

CREATE TABLE table_name (
    ...,
    column_name type_name NOT NULL,
    ...
);
Code language: SQL (Structured Query Language) (sql)

Till skillnad från andra begränsningar som PRIMARY KEY och CHECK , du kan bara definiera NOT NULL begränsningar på kolumnnivå, inte tabellnivå.

Baserat på SQL-standarden, PRIMARY KEY ska alltid antyda NOT NULL . Däremot tillåter SQLite NULL värden i PRIMARY KEY kolumn förutom att en kolumn är INTEGER PRIMARY KEY kolumn eller tabellen är en WITHOUT ROWID tabellen eller kolumnen definieras som en NOT NULL kolumn.

Detta beror på en bugg i vissa tidiga versioner. Om den här buggen fixas för att överensstämma med SQL-standarden, kan den bryta de äldre systemen. Därför har det beslutats att tillåta NULL värden i PRIMARY KEY kolumn.

En gång en NOT NULL begränsning är kopplad till en kolumn, varje försök att ställa in kolumnvärdet till NULL till exempel att infoga eller uppdatera kommer att orsaka en begränsningsöverträdelse.

SQLite NOT NULL begränsningsexempel

Följande exempel skapar en ny tabell med namnet suppliers :

CREATE TABLE suppliers(
    supplier_id INTEGER PRIMARY KEY,
    name TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)

I det här exemplet är supplier_id är PRIMARY KEY kolumnen för suppliers tabell. Eftersom den här kolumnen är deklarerad som INTEGER PRIMARY KEY , den accepterar inte NULL värden.

name kolumnen deklareras också med en NOT NULL begränsning, så den accepterar endast icke-NULL-värden.

Följande sats försöker infoga en NULL i name kolumnen för suppliers tabell:

INSERT INTO suppliers(name)
VALUES(NULL);
Code language: SQL (Structured Query Language) (sql)

Satsen misslyckas på grund av NOT NULL begränsningsöverträdelse. Här är felmeddelandet:

SQL Error [19]: [SQLITE_CONSTRAINT]  Abort due to constraint violation (NOT NULL constraint failed: suppliers.name)Code language: CSS (css)

I den här handledningen har du lärt dig hur du använder SQLite NOT NULL begränsning för att säkerställa att värden i en kolumn inte är NULL.


  1. 3 sätt att returnera tidszonen från ett Datetime-värde i Oracle

  2. MySQL mellan klausul inte inkluderande?

  3. Ad-hoc anslutningssträngar och heterogena frågor för MS Access

  4. Kan inte binda argument vid index 2 eftersom indexet ligger utanför intervallet