Mysql执行更新或删除操作时不以主键作为where条件报错

问题:

在执行 update prd_property set isdel = 1 where prdid = 211 时,报如下错误:

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.

原因:

是因为 Mysql 有个叫 SQL_SAFE_UPDATES 的变量,为了数据库更新操作的安全性,此值默认为 1。

当 SQL_SAFE_UPDATES = 1 时,
update 语句必须满足如下条件之一才能执行成功  
1) 使用 where子句,并且 where 子句中列必须为 prefix 索引列  
2) 使用 limit  
3) 同时使用 where子句和 limit (此时 where 子句中列可以不是索引列)  
  
delete 语句必须满足如下条件之一才能执行成功  
1) 使用 where 子句,并且 where 子句中列必须为 prefix 索引列  
2) 同时使用 where 子句和 limit (此时 where 子句中列可以不是索引列)  

当 SQL_SAFE_UPDATES =0 时,update 和 delete 操作将会顺利执行。


 解决:
所以可以先设置SQL_SAFE_UPDATES的值为0,然后再执行更新,例如:
set sql_safe_updates=0;
update prd_property set isdel = 1 where prdid = 211;执行成功

为了数据库安全,还是将set sql_safe_updates设回了1,多取一次,用主键更新。

参考网址:
http://blog.csdn.net/shaochenshuo/article/details/51351452
http://blog.csdn.net/dong976209075/article/details/8791904



你可能感兴趣的:(数据库)