Quelle est la syntaxe pour spécifier une clé primaire sur plus d'une colonne dans SQLITE?
sqlite
primary-key
ddl
composite-primary-key
Bogdan Gavril MSFT
la source
la source
Réponses:
Selon la documentation , c'est
la source
la source
NULL
est autorisé dans les clés primaires. Cette réponse souligne que si vous voulez un comportement plus standard, vous devez ajouter leNOT NULL
vous - même. Ma réponse est juste la syntaxe très basique d'une clé primaire multi-colonnes.Oui. Mais n'oubliez pas qu'une telle clé primaire autorise
NULL
plusieurs fois les valeurs dans les deux colonnes.Créez une table comme telle:
Maintenant, cela fonctionne sans aucun avertissement:
la source
NULL
?Basique:
Si vos colonnes sont des clés étrangères d'autres tables (cas courant):
la source
Les champs de clé primaire doivent être déclarés non nuls (ce n'est pas standard car la définition d'une clé primaire est qu'elle doit être unique et non nulle). Mais ci-dessous est une bonne pratique pour toutes les clés primaires multi-colonnes dans n'importe quel SGBD.
la source
Depuis la version 3.8.2 de SQLite, une alternative aux spécifications explicites NOT NULL est la spécification "WITHOUT ROWID": [ 1 ]
Les tables "SANS ROWID" ont des avantages potentiels en termes d'efficacité, donc une alternative moins verbeuse à considérer est:
Par exemple, à l'invite sqlite3:
sqlite> insert into t values(1,null,3); Error: NOT NULL constraint failed: t.c2
la source
WITHOUT ROWID
a des implications supplémentaires, et il ne devrait pas être utilisé comme alternative à l'écriture àNOT NULL
côté de votre clé primaire.D'une autre manière, vous pouvez également créer la clé primaire à deux colonnes
unique
et la clé d' incrémentation automatiqueprimary
. Tout comme ceci: https://stackoverflow.com/a/6157337la source
PRIMARY KEY (id, name)
n'a pas fonctionné pour moi. L'ajout d'une contrainte a fait le travail à la place.CREATE TABLE IF NOT EXISTS customer (id INTEGER, name TEXT, user INTEGER, CONSTRAINT PK_CUSTOMER PRIMARY KEY (user, id))
la source
Le code suivant crée une table avec 2 colonnes comme clé primaire dans SQLite.
SOLUTION:
la source