Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql supprimer en mode sans échec

En cherchant sur Google, la réponse populaire semble être "il suffit de désactiver le mode sans échec" :

SET SQL_SAFE_UPDATES = 0;
DELETE FROM instructor WHERE salary BETWEEN 13000 AND 15000;
SET SQL_SAFE_UPDATES = 1;

Si je suis honnête, je ne peux pas dire que j'ai jamais pris l'habitude de courir en mode sans échec. Pourtant, je ne suis pas entièrement à l'aise avec cette réponse car elle suppose simplement que vous devriez modifier la configuration de votre base de données chaque fois que vous rencontrez un problème.

Ainsi, votre deuxième requête est plus proche de la cible, mais rencontre un autre problème :MySQL applique quelques restrictions aux sous-requêtes, et l'une d'entre elles est que vous ne pouvez pas modifier une table tout en la sélectionnant dans une sous-requête.

Citant le manuel MySQL, Restrictions sur les sous-requêtes :

Ce dernier élément est votre réponse. Sélectionnez les ID cibles dans une table temporaire, puis supprimez-les en faisant référence aux ID dans cette table :

DELETE FROM instructor WHERE id IN (
  SELECT temp.id FROM (
    SELECT id FROM instructor WHERE salary BETWEEN 13000 AND 15000
  ) AS temp
);

Démo SQLFiddle .