【发布时间】:2014-03-17 11:21:48
【问题描述】:
我有一个表讲师,我想删除工资在某个范围内的记录 一个直观的方式是这样的:
delete from instructor where salary between 13000 and 15000;
但是,在安全模式下,如果不提供主键 (ID),我无法删除记录。
所以我写了下面的sql:
delete from instructor where ID in (select ID from instructor where salary between 13000 and 15000);
但是,有一个错误:
You can't specify target table 'instructor' for update in FROM clause
我很困惑,因为当我写的时候
select * from instructor where ID in (select ID from instructor where salary between 13000 and 15000);
它不会产生错误。
我的问题是:
- 此错误消息的真正含义是什么?为什么我的代码有误?
- 如何重写这段代码以使其在安全模式下工作?
谢谢!
【问题讨论】:
-
您要保持安全模式吗?你在使用 mySql 工作台吗?
-
您的两个问题的答案都是肯定的。而且令我惊讶的是,当我使用jdbc在没有PK的情况下删除mysql数据库中的记录时,它不会产生错误。那么安全模式只针对mysql workbench?
-
不——我问是因为如果你想在 mySQL 工作台中关闭它,我可以告诉你怎么做。就我个人而言,我将其关闭...必须拥有 ID 非常安全 - 但在开发方面,我发现这很痛苦