报错:
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语句是进行批量更新或者删除的时候就会提示这个错误。
解决方式:
- 在Workbench中修改:在右上角的设置中=》首选项=》SQL Editor=》Safe Updates(rejects UPDATE and DELETES with no restrictions),将前面的钩取消,OK,并重新进入数据库连接(关闭当前数据库链接,重新打开)
- 利用sql代码修改:
将安全模式修改为关闭set SQL_SAFE_UPDATES=0;
- 如果不使用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