【MySQL】ERROR 1175 安全模式UPDATE/DELETE操作失败

【问题描述 】:
在做某些update 或者 delete操作时,会报错:
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
大致意思是,使用了安全模式下,尝试使用update(delete)操作表时,没有在where条件里写有key的列。


比如,某张表有两个字段,其中col_1为主键,以下操作都是被禁止的:
  1. DELETE FROM table_name;
  2. DELETE FROM table_name LIMIT 5;
  3. DELETE FROM table_Name WHERE col_2=0;
  4. UPDATE table_name SET col_1=0;
  5. UPDATE table_name SET col_1=0 WHERE col_2=0;

【解决方案 】:
要么禁用这个安全模式,要么按要求写sql即可解决这个问题:


〇 禁用对应安全模式:
实际上是开启了sql_safe_updates这个参数导致的,可以检查一下该参数:
  1. mysql> SELECT @@sql_safe_updates;
  2. +--------------------+
  3. | @@sql_safe_updates |
  4. +--------------------+
  5. | 1                  |
  6. +--------------------+
  7. 1 row in set (0.00 sec)
如果临时禁用,可以直接动态修改会话级别的模式
  1. mysql> SET sql_safe_updates=0;
  2. Query OK, 0 rows affected (0.00 sec)

如果永久修改,则需要在my.cnf中做修改:
[mysql]下的 safe-updates参数注释或者删掉,重新通过client登录mysql-server即可。



〇 修改sql
sql_safe_updates开启的情况下,如果需要 使用update/delete操作一张表 ,必须满足一下条件之一:
在DELETE操作里:
①  需要在 where 中写明有key的列的条件,比如此处可以是WHERE col_1=0;(col_1为主键)。
或者

② 需要在where中写名其他非key列的条件,并且加上limit限制

在UPDATE操作里:
① 需要指定limit限制
或者
 需要在where中写明有key的列的条件
或者
 需要在where中写名其他非key列的条件,并且加上limit限制




作者微信公众号(持续更新)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29773961/viewspace-2123558/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29773961/viewspace-2123558/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值