Aller au contenu
Contraintes & intégrité

PRIMARY KEY

La clé primaire identifie chaque ligne de façon unique et stable : jamais deux fois la même valeur, jamais NULL. C'est elle que référencent les clés étrangères des autres tables.

  • clé primaire
  • identifiant
  • unique
  • clé composite
  • rowid

Syntaxe

Modèle
id INTEGER PRIMARY KEY            -- numérotée automatiquementPRIMARY KEY (col1, col2)          -- clé composite

Exemple

Exemple concret
CREATE TABLE project_grades (  student_id INTEGER NOT NULL REFERENCES students(id),  project TEXT NOT NULL,  grade REAL,  PRIMARY KEY (student_id, project));INSERT INTO project_grades VALUES (1, 'Exposé', 15.5), (1, 'Maquette', 17);INSERT INTO project_grades VALUES (1, 'Exposé', 12);-- Jeu de données : école-- Une note par élève et par projet. La seconde insertion est refusée.-- Résultat attendu : erreur « UNIQUE constraint failed: project_grades.student_id, project_grades.project »

À retenir

  1. Une table n'a qu'une clé primaire, mais celle-ci peut porter sur plusieurs colonnes (clé composite), typique des tables d'association.
  2. Dans SQLite, id INTEGER PRIMARY KEY suffit pour une numérotation automatique, car la colonne devient un alias du rowid.
  3. Piège : AUTOINCREMENT n'apporte pas la numérotation, déjà fournie. Il garantit seulement qu'un identifiant supprimé ne sera jamais réattribué, au prix d'une table interne supplémentaire. La documentation de SQLite le déconseille sauf besoin précis.
  4. Piège : pour des raisons historiques, SQLite accepte NULL dans une clé primaire qui n'est pas INTEGER PRIMARY KEY. Ajoutez NOT NULL à chaque colonne d'une clé composite ou textuelle.

Voir aussi