Jaka jest składnia określania klucza podstawowego w więcej niż 1 kolumnie w SQLITE?
sqlite
primary-key
ddl
composite-primary-key
Bogdan Gavril MSFT
źródło
źródło
Odpowiedzi:
Zgodnie z dokumentacją jest to
źródło
źródło
NULL
jest dozwolone w kluczach podstawowych. Ta odpowiedź podkreśla, że jeśli chcesz bardziej standardowych zachowań, musisz dodaćNOT NULL
siebie. Moja odpowiedź to tylko bardzo podstawowa składnia dla klucza głównego z wieloma kolumnami.Tak. Pamiętaj jednak, że taki klucz podstawowy dopuszcza
NULL
wartości w obu kolumnach wiele razy.Utwórz tabelę jako taką:
Teraz działa to bez żadnego ostrzeżenia:
źródło
NULL
?Basic:
Jeśli twoje kolumny to klucze obce innych tabel (częsty przypadek):
źródło
Pola klucza głównego powinny być zadeklarowane jako niepuste (jest to niestandardowe, ponieważ definicja klucza podstawowego polega na tym, że musi on być unikalny, a nie pusty). Ale poniżej znajduje się dobra praktyka dla wszystkich wielokolumnowych kluczy podstawowych w dowolnym DBMS.
źródło
Od wersji 3.8.2 SQLite alternatywą dla jawnych specyfikacji NOT NULL jest specyfikacja „BEZ ROWID”: [ 1 ]
Tabele „BEZ ROWIDA” mają potencjalne zalety w zakresie wydajności, dlatego mniej szczegółową alternatywą do rozważenia jest:
Na przykład po znaku zachęty sqlite3:
sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
źródło
WITHOUT ROWID
ma dodatkowe implikacje i nie powinien być używany jako alternatywa dla pisaniaNOT NULL
obok klucza podstawowego.W inny sposób, można również zrobić dwie kolumny klucza podstawowego
unique
i automatycznego przyrostu kluczaprimary
. Dokładnie tak: https://stackoverflow.com/a/6157337źródło
PRIMARY KEY (id, name)
nie działało dla mnie. Zamiast tego wystarczyło dodanie ograniczenia.CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))
źródło
Poniższy kod tworzy tabelę z 2 kolumnami jako klucz podstawowy w SQLite.
ROZWIĄZANIE:
źródło