sql >> Base de Datos >  >> RDS >> Mysql

eliminar mysql en modo seguro

Buscando en Google, la respuesta popular parece ser "simplemente apaga el modo seguro" :

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

Si soy honesto, no puedo decir que alguna vez me haya acostumbrado a correr en modo seguro. Aún así, no me siento del todo cómodo con esta respuesta, ya que simplemente supone que debe cambiar la configuración de su base de datos cada vez que se encuentre con un problema.

Entonces, su segunda consulta está más cerca de la marca, pero se encuentra con otro problema:MySQL aplica algunas restricciones a las subconsultas, y una de ellas es que no puede modificar una tabla mientras la selecciona en una subconsulta.

Citando el manual de MySQL, Restricciones en subconsultas :

Esa última parte es tu respuesta. Seleccione los ID de destino en una tabla temporal, luego elimínelos haciendo referencia a los ID en esa tabla:

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

Demostración de SQLFiddle .