You are using safe update mode and you tried to update a table without a WHERE that uses a KEY colum

报错:

16:43:09    UPDATE product SET  p_price = p_price*1.50   WHERE (p_price<'10.00')    Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.    0.000 sec
 

遇到这个问题后根据这个问题,做了一小小点研究:

问题的根本:MySQL Workbench的安全设置。当要执行的SQL语句是进行批量更新或者删除的时候就会提示这个错误。

解决方式:

  1. 在Workbench中修改:在右上角的设置中=》首选项=》SQL Editor=》Safe Updates(rejects UPDATE and DELETES with no restrictions),将前面的钩取消,OK,并重新进入数据库连接(关闭当前数据库链接,重新打开)
  2. 利用sql代码修改:
    set SQL_SAFE_UPDATES=0;
    将安全模式修改为关闭
  3. 如果不使用Workbench,用cmd进入则不会出现该问题。

小白的业余小研究:

利用方法1来解决问题:

#显示安全模式是否有开
show variables like 'sql_safe_updates';

运行结果为:

告诉了我安全模式已经关闭,这这个方法适合小白新手学习,因为这样的话不需要每次都利用代码关闭安全模式。

利用方法2来解决问题:

需要每次需要利用非主键来做where时,需要做一次修改,觉得大神可以每次要就改,不需要又改回来,安全性比较高。

再深入:

如果利用方法1进行修改,则不会出现问题:

 

但如果利用方法2进行修改,这无论安全模式是否有打开,在利用主健作为where的条件时,都会出现这样的警告,但不会出现事务的回滚

17:03:29    UPDATE product SET  p_price = p_price*1.50   WHERE (p_code<347)    2 row(s) affected, 1 warning(s): 1265 Data truncated for column 'p_price' at row 2 Rows matched: 2  Changed: 2  Warnings: 1    0.015 sec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值