Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql im abgesicherten Modus löschen

Beim Googeln scheint die beliebte Antwort "Schalten Sie einfach den abgesicherten Modus aus" :

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

Wenn ich ehrlich bin, kann ich nicht sagen, dass ich es mir jemals zur Gewohnheit gemacht habe, im abgesicherten Modus zu laufen. Trotzdem fühle ich mich mit dieser Antwort nicht ganz wohl, da sie nur davon ausgeht, dass Sie Ihre Datenbankkonfiguration jedes Mal ändern sollten, wenn Sie auf ein Problem stoßen.

Ihre zweite Abfrage kommt dem Ziel also näher, trifft aber auf ein anderes Problem:MySQL wendet einige Einschränkungen auf Unterabfragen an, und eine davon ist, dass Sie eine Tabelle nicht ändern können, während Sie in einer Unterabfrage daraus auswählen.

Zitat aus dem MySQL-Handbuch, Einschränkungen für Unterabfragen :

Das letzte Bit ist Ihre Antwort. Wählen Sie Ziel-IDs in einer temporären Tabelle aus und löschen Sie sie dann, indem Sie auf die IDs in dieser Tabelle verweisen:

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

SQLFiddle-Demo .