MYSQL安全模式 Mysql版本:5.7.20
背景: 为了避免在执行delete、update将全表数据清空或者覆盖修改,在新项目营销云中开启了mysql的安全模式。 安全模式要求不能对非主键的条件查询做update和delete操作 SET global SQL_SAFE_UPDATES = 1;
开启后出现的报错: 在修改跟删除数据时候,没有加where语句、或者加了where语句 where中没有使用索引列,导致SQL执行失败,后台项目报错,报错内容: [Err] 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column 规则: 索引不能使用唯一索引,使用唯一索引会报错 如果设置了sql_safe_updates=1,那么update语句必须满足如下条件之一才能执行成功 1)使用where子句,并且where子句中列必须包含索引列 反面教材: update mkc_com_project set name='asdasd' where name='五4545'; 2)使用limit 3)同时使用where子句和limit(此时where子句中列可以不是索引列) delete语句必须满足如下条件之一才能执行成功 1)使用where子句,并且where子句中列必须包含索引列(除唯一索引) 反面教材: delete from mkc_com_project where id=22 ; 2)同时使用where子句和limit(此时where子句中列可以不是索引列)