sql >> Databasteknik >  >> RDS >> Mysql

mysql radera i felsäkert läge

När man googlar runt verkar det populära svaret vara "stäng bara av säkert läge" :

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

Om jag ska vara ärlig kan jag inte säga att jag någonsin har haft för vana att springa i säkert läge. Ändå är jag inte helt bekväm med det här svaret eftersom det bara förutsätter att du ska ändra din databaskonfiguration varje gång du stöter på ett problem.

Så, din andra fråga är närmare målet, men träffar på ett annat problem:MySQL tillämpar några begränsningar på underfrågor, och en av dem är att du inte kan ändra en tabell medan du väljer från den i en underfråga.

Citerar från MySQL-manualen, Restrictions on Subqueries :

Den sista biten är ditt svar. Välj mål-ID:n i en tillfällig tabell och radera sedan genom att referera till ID:n i den tabellen:

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. Unik nyckel i Oracle med exempel

  2. 2 sätt att kontrollera kompatibilitetsnivån i Oracle (SQLcl &SQL*Plus)

  3. Resultat inom radie - Optimering av långsam MySQL-fråga

  4. Långsam fråga om information_schema.tables