SET mere_id = 52
WHERE nom = 'Spoutnik'
AND espece_id = 3;
Attention : plusieurs contraintes d'unicité sur la même table
Souvenez-vous, avec REPLACE, nous avons vu que s'il existait plusieurs contraintes d'unicité sur la même table, et que
plusieurs lignes faisaient échouer l'insertion à cause de ces contraintes, REPLACE supprimait autant de lignes que nécessaire
pour faire l'insertion.
Le comportement de ON DUPLICATE KEY est différent ! Dans le cas où plusieurs lignes seraient impliquées, seule une de ces
lignes est modifiée (et impossible de prédire laquelle). Il faut donc à tout prix éviter d'utiliser cette clause quand plusieurs
contraintes d'unicité pourraient être violées par l'insertion.
En résumé
Le mot-clé IGNORE, utilisé dans des requêtes INSERT, UPDATE ou LOAD DATA, permet de ne pas déclencher d'erreur
en cas de violation d'une contrainte d'unicité : la ligne posant problème ne sera simplement pas insérée/modifiée.
Utiliser REPLACE au lieu de INSERT (ou dans LOAD DATA) supprime les lignes existantes qui provoquent une
violation de la contrainte d'unicité à l'insertion, puis insère la nouvelle ligne.
Il est possible, en ajoutant une clause ON DUPLICATE KEY UPDATE à une requête INSERT INTO, de provoquer
soit une insertion (si aucune contrainte d'unicité n'est violée), soit une modification de certaines valeurs de la ligne déjà
existante (dans le cas contraire).
On commence à faire des choses plutôt sympathiques avec nos données, n'est-ce pas ? Cette partie a pu vous paraître un peu
plus compliquée. Du coup, pour les prochaines, je vous prépare quelque chose de simple, et pourtant extrêmement utile !
Partie 2 : Index, jointures et sous-requêtes
147/414
www.openclassrooms.com
Précédent

- 147/413

Suivant