MySQL更新FROM从句中的字段 mysql [Err] 1093
来源:互联网 发布:如何制作淘宝首页模板 编辑:程序博客网 时间:2024/05/18 00:49
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
阅读全文
0 0
- MySQL更新FROM从句中的字段 mysql [Err] 1093
- MySQL数据库update更新子查询[Err] 1093 - You can't specify target table 'text' for update in FROM clause
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的陷阱
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的陷阱
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的陷阱
- mysql中[Err] 1093
- MySQL [Err] 1093
- update from 。。 mysql多个表更新
- mysql 字符字段的更新
- mysql更新字段的语句
- Mysql中的字段类型
- MySQL字段中的枚举
- Mysql 更新、删除字段、自增长字段
- mysql configure err
- MySQL [Err] 1215
- mysql [Err] 1292
- mysql笔记-[Err] 1235
- MySql错误:[Err] 1292
- 【MyBatis学习10】高级映射之多对多查询
- 18th 【最短路 floyd】智捅马蜂窝
- jQuery-Validate验证插件的使用步骤详解
- 黑化的牛牛
- html笔记
- MySQL更新FROM从句中的字段 mysql [Err] 1093
- ueditor和xss的二三事
- Linux基础—目录结构及相应用途
- Android深入理解JNI(二)类型转换、方法签名和JNIEnv
- 尼科彻斯定理
- 单链表的基本操作
- poj 1852 Ants
- React Native 学习笔记(二)
- Objective-C中的协议(protocol)与委托