MySQL更新FROM从句中的字段mysql[Err]1093
程序员文章站
2022-05-18 14:34:06
mysql更新from从句中的字段mysql[err]1093。
update test1
set id = id + 50
where id in (select...
mysql更新from从句中的字段mysql[err]1093。
update test1 set id = id + 50 where id in (select t1.id from test1 t1, test2 t2 where t1.id = t2.id)
上面sql语句是想更新,在test2中存在test1的数据,更新test1表,但是由于要更新的字段 id 跟需要查找的字段重叠,导致会出现如下错误:
[err] 1093 - you can't specify target table 'testmyisam' for update in from clause
错误原因是:mysql不能更新出现在 from 从句中的字段;
可是这种语句在oracle,甚至pgsql都是可以执行的,不能执行的原因我猜是由于mysql历史没有事务的特性决定的(原因是瞎猜的):由于mysql最早是没有事务的,所以更新应该是执行一条提交一条的,但是由于要更新的字段出现在了from后面,成为了查询条件,那么更新后的语句就有可能再次被查询出来,导致更新的结果跟预期的不符合,所以直接禁止这种操作。
变通方法:
通过 join 技巧进行更新
update test t1 join (select t1.id from test1 t2, test t1 where t1.id = t2.id) t2 on t1.id = t2.id set t1.id = t1.id + 50
上一篇: 安徽有什么必吃美食 安徽美食盘点
下一篇: MySQL数据库update更新子查询