sql >> Databáze >  >> RDS >> SQLite

Automatické zvýšení klíče SQLite PRIMARY nefunguje

Z dokumentace:

Tabulka vytvořená pomocí CREATE TABLE AS nemá žádný PRIMÁRNÍ KLÍČ a žádná omezení jakéhokoli druhu. Výchozí hodnota každého sloupce je NULL.

Nemusíte přidávat UNIQUE omezení na SLOUPEK, který má PRIMARY KEY omezení.
Vysvětlení:

Omezení UNIQUE je podobné omezení PRIMARY KEY s tím rozdílem, že jedna tabulka může mít libovolný počet UNIQUE omezení.

Místo toho přidejte NOT NULL .To je důvod, proč:

Podle standardu SQL by PRIMARY KEY měl vždy implikovat NOTNULL. Bohužel, kvůli chybě v některých raných verzích tomu tak není v SQLite. Pokud sloupec není INTEGER PRIMARY KEY nebo tabulka není tabulka WITHOUT ROWID nebo sloupec není deklarován jako NOT NULL, SQLite povoluje hodnoty NULL ve sloupci PRIMARY KEY. SQLite by mohl být opraven tak, aby odpovídal standardu, ale pokud tak učiníte, může to narušit starší aplikace. Proto bylo rozhodnuto pouze zdokumentovat skutečnost, že SQLite umožňuje hodnoty NULL ve většině sloupců PRIMARY KEY.


Doporučuji použít tuto definici sloupce:

CREATE TABLE conversations (
    conversation_id INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT,
...
}


  1. Jak počítat slova v MySQL / náhradě regulárních výrazů?

  2. SQLite3.Exception:Obraz disku databáze je chybný

  3. IDENTITY() vs IDENTITY() v SQL Server:Jaký je rozdíl?

  4. SQL:Jaké je výchozí pořadí dotazů?