mysql中更新或者删除语句中子语句不能操作同一个表You can't specify target table 'test' for update in FROM clause
2016-12-08 17:56
337 查看
问题描述:有个数据表test,有个字段value,如下
mysql> select * from test;
+----+------------------------------------+
| id | value |
+----+------------------------------------+
| 3 | 3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 4 | 4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 5 | 5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 6 | 6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 7 | 7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
如果执行如下sql语句会报错
delete from test where id=(select min(id) from test);
报的错误是You can't specify target table 'test' for update in FROM clause。
原因是不能在操作一张表的同时更新或者删除这张表的内容。
解决方法如下:(3个步骤)
create table tmp as select min(id) as col1 from test;
delete from test where id =(select col1 from tmp);
drop table tmp
这时又遇到一个问题,如何在php中一次执行多个sql语句(当然也可以分3次执行),此问题待查
mysql> select * from test;
+----+------------------------------------+
| id | value |
+----+------------------------------------+
| 3 | 3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 4 | 4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 5 | 5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 6 | 6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
| 7 | 7aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
如果执行如下sql语句会报错
delete from test where id=(select min(id) from test);
报的错误是You can't specify target table 'test' for update in FROM clause。
原因是不能在操作一张表的同时更新或者删除这张表的内容。
解决方法如下:(3个步骤)
create table tmp as select min(id) as col1 from test;
delete from test where id =(select col1 from tmp);
drop table tmp
这时又遇到一个问题,如何在php中一次执行多个sql语句(当然也可以分3次执行),此问题待查
相关文章推荐
- b/s软件中使用Access数据库,只能查询,不能添加、修改、删除,提示操作必须是一个可更新的查询解决。
- 一次从项目数据库中的某个表中插入或者更新或者删除n条记录操作t_sql语句
- "BOF或EOF中有一个是真,或者当前的记录已被删除,所需的操作要求一个当前的记录"问题解决
- Access update语句 提示 "操作必须使用一个可更新的查询"Access update语句 提示 "操作必须使用一个可更新的查询"
- [置顶] 如何处理:BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录
- mysql事务:一个事务进行查询,另一个事务进行改、删除、插入等操作
- C#使用oledb连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决办法
- 八、初学.NET—GridView 中实现每一行的编辑、删除和更新语句,并且编辑模式绑定下拉框或者单选框。
- [置顶] BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
- mysql不能在更新一个表的同时查询同样的一张表
- Delphi利用ADO连接数据库报错“bof或eof中有一个是真,或者当前记录已被删除,所需的操作要求一个当前的操作”
- ADODB.Recordset 错误 '800a0bcd' BOF 或 EOF 中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
- 已更新或者删除的行值要么不能使该行成为唯一行,要么改变了多个行
- 使用hibernate更新和删除时不能使用关系联接操作
- 终端中以窗口形式打开一个文件夹and回收站and删除软件and挂载分区and软件源更新and安装JDKandMySQLand安装图解:Linux Mint 4.0
- Access数据库:它已经被别的用户以独占方式打开,操作必须使用一个可更新的查询,不能锁定文件
- Asp.Net 2.0 操作mysql 数据基类(读取,删除,插入,更新)
- Asp.Net 2.0 操作mysql 数据基类(读取,删除,插入,更新)
- ASP提示 无法从指定的数据表中删除 和 操作必须使用一个可更新的查询?
- 1.利用android提高的的insert,query,update,deleteAPI与execSql,rawQuery函数执行原生的插入,查询,更新,删除语句操作花费时间的对比结果