Wie lautet die Syntax zum Angeben eines Primärschlüssels für mehr als eine Spalte in SQLITE?
sqlite
primary-key
ddl
composite-primary-key
Bogdan Gavril MSFT
quelle
quelle
Antworten:
Laut Dokumentation ist es
quelle
quelle
NULL
ist in Primärschlüsseln zulässig. Diese Antwort betont, dass Sie dasNOT NULL
Selbst hinzufügen müssen, wenn Sie mehr Standardverhalten wünschen . Meine Antwort ist nur die grundlegende Syntax für einen mehrspaltigen Primärschlüssel.Ja. Denken Sie jedoch daran, dass ein solcher Primärschlüssel
NULL
Werte in beiden Spalten mehrmals zulässt .Erstellen Sie eine Tabelle als solche:
Dies funktioniert nun ohne Vorwarnung:
quelle
NULL
?Basic :
Wenn Ihre Spalten Fremdschlüssel anderer Tabellen sind (häufiger Fall):
quelle
Primärschlüsselfelder sollten als nicht null deklariert werden (dies ist kein Standard, da die Definition eines Primärschlüssels lautet, dass er eindeutig und nicht null sein muss). Im Folgenden finden Sie eine bewährte Methode für alle mehrspaltigen Primärschlüssel in einem DBMS.
quelle
Seit Version 3.8.2 von SQLite ist die Spezifikation "WITHOUT ROWID" eine Alternative zu expliziten NOT NULL-Spezifikationen: [ 1 ]
"WITHOUT ROWID" -Tabellen bieten potenzielle Effizienzvorteile. Eine weniger ausführliche Alternative ist daher:
Zum Beispiel an der Eingabeaufforderung sqlite3:
sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
quelle
WITHOUT ROWID
hat zusätzliche Auswirkungen und sollte nicht als Alternative zum SchreibenNOT NULL
neben Ihrem Primärschlüssel verwendet werden.Auf andere Weise können Sie auch den zweispaltigen Primärschlüssel
unique
und den Auto-Inkrement- Schlüssel festlegenprimary
. Einfach so: https://stackoverflow.com/a/6157337quelle
PRIMARY KEY (id, name)
hat bei mir nicht funktioniert. Das Hinzufügen einer Einschränkung hat den Job stattdessen erledigt.CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))
quelle
Der folgende Code erstellt eine Tabelle mit 2 Spalten als Primärschlüssel in SQLite.
LÖSUNG:
quelle