sql >> Database >  >> RDS >> Mysql

mysql verwijderen in veilige modus

Googlen, het populaire antwoord lijkt te zijn "schakel de veilige modus gewoon uit" :

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

Als ik eerlijk ben, kan ik niet zeggen dat ik er ooit een gewoonte van heb gemaakt om in de veilige modus te rennen. Toch ben ik niet helemaal op mijn gemak met dit antwoord, omdat het er gewoon van uitgaat dat je je databaseconfiguratie moet wijzigen elke keer dat je een probleem tegenkomt.

Dus uw tweede zoekopdracht is dichter bij het doel, maar stuit op een ander probleem:MySQL past een paar beperkingen toe op subquery's, en een daarvan is dat u een tabel niet kunt wijzigen terwijl u er in een subquery uit selecteert.

Citaat uit de MySQL-handleiding, Beperkingen op subquery's :

Dat laatste is uw antwoord. Selecteer doel-ID's in een tijdelijke tabel en verwijder vervolgens door te verwijzen naar de ID's in die tabel:

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

SQLFiddle-demo .



  1. Kunt u geaggregeerde waarden gebruiken binnen ON DUPLICATE KEY

  2. SQL-rijen naar kolommen

  3. Objecten vergelijken op waarde. Deel 6:Implementatie van structuurgelijkheid

  4. Een berekend veld maken in Access