虽然系统中 极少有删除数据的操作,一般全是假删除,但是有时候还是对系统的一些垃圾日志做删除的,MySQL提供 sql_safe_updates 来限制次操作。 set sql_safe_updates = 1; 设置之后,会限制update delete 中不带 where 条件的SQL 执行,较严格。早日常开发中,开发人员很多时候都会由于SQL语句写的有问题导致服务器出问题,导致资源耗尽。 导致服务器数据全部更新或者被删除
我们来看一下官方解释
##因为sql_safe_updates是SYSTEM VAR,所以我们无法直接在mysql启动命令行和控制文件中添加该参数,只能在等能mysql实例后执行 set global/session sql_safe_updates=1;来设置。
但是我们可以通过init_connect参数来实现在控制文件中设置sql_safe_updates的目的,我们可以在控制文件中添加如下记录(注意init_connect对于有super权限的用户是无效的)
init_connect='SET 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子句中列可以不是索引列)
3.来个例子可以自己试试