Les contraintes en SQL
PRIMARY KEY, FOREIGN KEY et REFERENCES, UNIQUE, NOT NULL, CHECK, contraintes de colonne et de table, contraintes nommées, et les actions ON DELETE et ON UPDATE (RESTRICT, CASCADE, SET NULL).
- 24 cartes
- 4 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Comprendre
Quelques cartes du deck
Contrainte d'intégrité : de quoi s'agit-il ?
Voir la réponse
Règle déclarée dans le schéma, que la base vérifie à chaque écriture et qui lui fait refuser toute ligne qui l'enfreint.
La règle est garantie pour toutes les applications qui écrivent dans la base, alors qu'un contrôle écrit dans le code d'un programme peut être oublié par un autre.
Que donnent ces deux INSERT ?
```sql
CREATE TABLE client (
id INTEGER PRIMARY KEY,
email VARCHAR(80) UNIQUE,
age INTEGER CHECK (age >= 18)
);
INSERT INTO client VALUES (1, NULL, NULL);
INSERT INTO client VALUES (2, NULL, 20);`- Les deux passent : NULL est accepté par CHECK comme par UNIQUE
- Le premier échoue sur CHECK, car la condition NULL >= 18 n'est pas vraie
- Le second échoue sur UNIQUE, car les deux e-mails NULL sont considérés égaux
- Le premier échoue : une colonne UNIQUE doit toujours être renseignée à l'insertion
Voir la réponse
Les deux passent : NULL est accepté par CHECK comme par UNIQUE
CHECK ne rejette qu'une condition fausse ; NULL >= 18 est inconnu, donc accepté. UNIQUE ne compare pas les NULL entre eux. Pour interdire le vide il faut déclarer NOT NULL.
Une contrainte qui porte sur une seule colonne peut s'écrire dans sa définition ; une contrainte sur plusieurs colonnes, comme une clé primaire composée, s'écrit au niveau de la ….
Voir la réponse
Une contrainte qui porte sur une seule colonne peut s'écrire dans sa définition ; une contrainte sur plusieurs colonnes, comme une clé primaire composée, s'écrit au niveau de la table.
Une contrainte de colonne ne porte que sur sa propre colonne. Dès qu'une règle en relie plusieurs, il faut la déclarer après la liste des colonnes.
PRIMARY KEY : de quoi s'agit-il ?
Voir la réponse
Contrainte qui désigne la ou les colonnes identifiant chaque ligne : leurs valeurs sont distinctes d'une ligne à l'autre et jamais NULL.
Une table n'en a qu'une. Elle implique NOT NULL et l'unicité, et c'est elle que les autres tables visent. Sur plusieurs colonnes, elle s'écrit au niveau de la table :
PRIMARY KEY (id_commande, num_ligne).En quoi une PRIMARY KEY diffère-t-elle d'une colonne simplement déclarée UNIQUE ?
- Elle interdit aussi NULL, et il n'y en a qu'une par table
- Seule la clé primaire crée un index pour accélérer les recherches
- UNIQUE ne se contrôle qu'en fin de transaction, la clé primaire à chaque ligne
- Une clé primaire se pose seulement sur un entier qui s'incrémente
Voir la réponse
Elle interdit aussi NULL, et il n'y en a qu'une par table
UNIQUE crée aussi un index, et se vérifie à chaque ligne comme la clé primaire. La vraie différence : PRIMARY KEY implique NOT NULL, désigne l'identifiant de la table (une seule) ; on peut poser autant de UNIQUE qu'on veut.