场景演示: mysql>, create table 测试(id int, name varchar (12), primary 键(id)); Query 好吧,,0,rows affected (0.04,秒) mysql>, insert into  test 价值(1,“双塔”); Query 好吧,,1,row affected (0.00,秒) mysql>, insert into  test 价值(2,“双塔”); Query 好吧,,1,row affected (0.00,秒) mysql>,提交; Query 好吧,,0,rows affected (0.00,秒) mysql>,, update test  set name=癮aaa”, where id ,拷贝(select id 得到测试); ERROR 1093, (HY000):,你可以't specify target table “测试”,for update 拷贝得到条款
官方说明:,,,,,,
错误:1093 SQLSTATE: HY000 (ER_UPDATE_TABLE_USED)
信息:你不能指定目标表“% s”从条款更新
这对试图选择发生错误和修改相同的表在一个声明中。如果选择尝试发生在一个派生表,可以避免这个错误通过设置derived_merge旗optimizer_switch系统变量来迫使子查询被物化成一个临时表,有效地使它成为一个不同的表> mysql>,, update test set name=癮aaa”, where id ,拷贝(select id 得到(select id 得到测试)c); Query 好吧,,2,rows affected (0.02,秒) Rows 匹配:,2,,改变:,2,,警告:,0
解决方法2:
官方说:可以通过设置optimizer_switch的derived_merge参数来解决。
,,,
备注:甲骨文是不会这个问题的