考虑到开发人员有时候不小心误更新数据,要求线上库的 MySQL 实例都设置 sql_safe_updates=1 来避免没有索引的 update、delete。

结果有一天开发发现下面的一个SQL 没法正确执行:

update  t1 set col2=1 where key1 in (select col2 from t2 where key2='ABcD');

错误如下:

ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

也就是说没法对没有走到索引的where条件进行更新。搜索了下发现,的确不行。及时 key1 和key2 分别是 t1、t2 的索引[我换成主键都不行] 。说明是不支持子查询的update。

google 了一下发现人家也问过这个问题。。

http://stackoverflow.com/questions/24314830/query-not-getting-executed-if-supplied-a-nested-sub-query

最后解决方法:

1)修改 session 级别的参数: set sql_safe_updates=0; 执行 update  操作。退出终端。

2)程序处理:先  select col2 from t2 where key2='ABcD' 获取数据,然后循环处理结果,并用  update t1 set col2=1 where key1=? 来批量更新过。建议还是用程序处理,临时修改变量不是长久之计。


mysql sql_safe_updates 不支持子查询的更新。的更多相关文章

  1. mysql update不支持子查询更新

    先看示例: SELECT uin,account,password,create_user_uin_tree FROM sys_user 结果: 表中的create_user_uin_tree标识该条 ...

  2. php+mysql 内联接 和 子查询

    INNER JOIN(内连接):取得两个表中存在连接匹配关系的记录 $sql="SELECT * FROM subject as a INNER JOIN e_user as b ON a. ...

  3. MySQL使用存储过程代替子查询

    摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...

  4. Mysql - 性能优化之子查询

    记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...

  5. MySQL 使用JOIN优化子查询

    1.数据准备 mysql> select * from student; +----+--------+----------+---------+-------------+ | id | na ...

  6. SQL随着子查询结果更新多个字段

    笔者:iamlasong 要求:表格内容需要改变,在临时表中内容的变化,使用SQL官方声明更新表若干领域. 假设更新一个字段,直接用字段名=子查询就能够了,多个字段更新,将字段在括号里并列写出就可以, ...

  7. SpringJDBC的JdbcTemplate在MySQL5.7下不支持子查询的问题

    org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [ SELECT ...

  8. mysql 外键和子查询,视图

    1.mysql 外键约束 建表时生成外键   foreing key ('sid') references' student'('id'); 建表后添加外键  alter table' course ...

  9. MySQL(八)子查询和分组查询

    一.子查询 1.子查询(subquery):嵌套在其他查询中的查询. 例如:select user_id from usertable where mobile_no in (select mobil ...

随机推荐

  1. 修改 TeamViewer ID方法

    修改 TeamViewer ID 的方法: 1. 开始 > 运行,录入%appdata%,删除TeamViewer的文件夹:2. 开始 > 运行,录入regedit:    删除 HKEY ...

  2. python 自动发邮件 Errno61 Connection refused

    此问题是在mac机器上遇到 之前在windows平台运行ok的脚本在mac上报错 后来查了半天 发现是网络接入不对 切换下网络后问题就解决了

  3. 深入理解display属性

    display 属性在网页布局中很常见,但是之前一直不了解他的各个属性的区别,只是简单的使用block.none属性,对于其他属性都不清楚,今天详细的学习和实践display属性的各个方面 定义 di ...

  4. 统一资源定位符URL类

    package j2se.core.net.base; import java.io.BufferedReader;import java.io.IOException;import java.io. ...

  5. C#图片压缩处理算法

    原文链接:http://blog.csdn.net/szstephenzhou/article/details/38900345

  6. HTML5之语义标签

    在HTML5标准中,新加了几个用于增添页面语义的标签,这些标签有:article.section.nav和aside等.与别的大多数标签不 同,浏览器在解释渲染这些标签的时候仅仅把它作为普通的div块 ...

  7. CSS总则。

    2.23:字体常用Css样式. font-family,font-size,color,font-weight,line-height,letter-spacing,text-decoration,t ...

  8. Android视图状态及重绘流程分析,带你一步步深入了解View(三)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17045157 在前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程, ...

  9. mysql text字段判断是否为空

    mysql text字段判断是否为空 mysql text字段为空select * from `tableName` where `textField` is null or `textField` ...

  10. img 是内联元素

    图片是内联元素 ,同时是内联替换元素(替换元素是能设置宽和高的) 取消图片的magin display:block;(一般初始化标签中会把图片设置成块状) replaced element <i ...