Violation de contrainte d'unicité
Lorsque vous insérez ou modifiez une ligne dans une table, différents événements en relation avec les clés et les index peuvent
se produire.
L'insertion/la modification peut réussir, c'est évidemment le mieux.
L'insertion/la modification peut échouer parce qu'une contrainte de clé secondaire n'est pas respectée.
L'insertion/la modification peut échouer parce qu'une contrainte d'unicité (clé primaire ou index UNIQUE) n'est pas
respectée.
Nous allons ici nous intéresser à la troisième possibilité : ce qui arrive en cas de non-respect d'une contrainte d'unicité. Pour
l'instant, dans ce cas-là, une erreur est déclenchée. À la fin de ce chapitre, vous serez capables de modifier ce comportement :
vous pourrez laisser l'insertion/la modification échouer, mais sans déclencher d'erreur ;
vous pourrez remplacer la(les) ligne(s) qui existe(nt) déjà par la ligne que vous essayez d'insérer (ne concerne que les
requêtes d'insertion) ;
enfin vous pourrez modifier la ligne qui existe déjà au lieu d'en insérer une nouvelle (ne concerne que les requêtes
d'insertion).
Ignorer les erreurs
Les commandes d'insertion et modification possèdent une option : IGNORE, qui permet d'ignorer (tiens donc !
) l'insertion
ou la modification si elle viole une contrainte d'unicité.
Insertion
Nous avons mis une contrainte d'unicité (sous la forme d'un index UNIQUE) sur la colonne nom_latin de la table Espece. Donc,
si l'on essaye d'insérer la ligne suivante, une erreur sera déclenchée puisqu'il existe déjà une espèce dont le nom latin est "Canis
canis".
Code : SQL
INSERT INTO Espece (nom_courant, nom_latin, description)
VALUES ('Chien en peluche', 'Canis canis', 'Tout doux, propre et
silencieux');
Code : Console
ERROR 1062 (23000): Duplicate entry 'Canis canis' for key 'nom_latin'
Par contre, si l'on utilise le mot-clé IGNORE :
Code : SQL
INSERT IGNORE INTO Espece (nom_courant, nom_latin, description)
VALUES ('Chien en peluche', 'Canis canis', 'Tout doux, propre et
silencieux');
Code : Console
Query OK, 0 rows affected (0.01 sec)
Plus d'erreur, la ligne n'a simplement pas été insérée.
Modification
Partie 2 : Index, jointures et sous-requêtes
142/414
www.openclassrooms.com
Lorsque vous insérez ou modifiez une ligne dans une table, différents événements en relation avec les clés et les index peuvent
se produire.
L'insertion/la modification peut réussir, c'est évidemment le mieux.
L'insertion/la modification peut échouer parce qu'une contrainte de clé secondaire n'est pas respectée.
L'insertion/la modification peut échouer parce qu'une contrainte d'unicité (clé primaire ou index UNIQUE) n'est pas
respectée.
Nous allons ici nous intéresser à la troisième possibilité : ce qui arrive en cas de non-respect d'une contrainte d'unicité. Pour
l'instant, dans ce cas-là, une erreur est déclenchée. À la fin de ce chapitre, vous serez capables de modifier ce comportement :
vous pourrez laisser l'insertion/la modification échouer, mais sans déclencher d'erreur ;
vous pourrez remplacer la(les) ligne(s) qui existe(nt) déjà par la ligne que vous essayez d'insérer (ne concerne que les
requêtes d'insertion) ;
enfin vous pourrez modifier la ligne qui existe déjà au lieu d'en insérer une nouvelle (ne concerne que les requêtes
d'insertion).
Ignorer les erreurs
Les commandes d'insertion et modification possèdent une option : IGNORE, qui permet d'ignorer (tiens donc !
) l'insertion
ou la modification si elle viole une contrainte d'unicité.
Insertion
Nous avons mis une contrainte d'unicité (sous la forme d'un index UNIQUE) sur la colonne nom_latin de la table Espece. Donc,
si l'on essaye d'insérer la ligne suivante, une erreur sera déclenchée puisqu'il existe déjà une espèce dont le nom latin est "Canis
canis".
Code : SQL
INSERT INTO Espece (nom_courant, nom_latin, description)
VALUES ('Chien en peluche', 'Canis canis', 'Tout doux, propre et
silencieux');
Code : Console
ERROR 1062 (23000): Duplicate entry 'Canis canis' for key 'nom_latin'
Par contre, si l'on utilise le mot-clé IGNORE :
Code : SQL
INSERT IGNORE INTO Espece (nom_courant, nom_latin, description)
VALUES ('Chien en peluche', 'Canis canis', 'Tout doux, propre et
silencieux');
Code : Console
Query OK, 0 rows affected (0.01 sec)
Plus d'erreur, la ligne n'a simplement pas été insérée.
Modification
Partie 2 : Index, jointures et sous-requêtes
142/414
www.openclassrooms.com
