Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql delete em modo de segurança


Pesquisando no Google, a resposta popular parece ser "basta desligar o modo de segurança" :
SET SQL_SAFE_UPDATES = 0;
DELETE FROM instructor WHERE salary BETWEEN 13000 AND 15000;
SET SQL_SAFE_UPDATES = 1;

Para ser honesto, não posso dizer que já criei o hábito de correr no modo de segurança. Ainda assim, não estou totalmente confortável com essa resposta, pois ela apenas pressupõe que você deve alterar a configuração do banco de dados toda vez que encontrar um problema.

Portanto, sua segunda consulta está mais próxima da marca, mas atinge outro problema:o MySQL aplica algumas restrições às subconsultas, e uma delas é que você não pode modificar uma tabela enquanto a seleciona em uma subconsulta.

Citando o manual do MySQL, Restrições em subconsultas :

Essa última parte é a sua resposta. Selecione os IDs de destino em uma tabela temporária e exclua fazendo referência aos IDs nessa tabela:
DELETE FROM instructor WHERE id IN (
  SELECT temp.id FROM (
    SELECT id FROM instructor WHERE salary BETWEEN 13000 AND 15000
  ) AS temp
);

Demonstração do SQLFiddle .