MySQL-1175错误与sql_safe_updates

2020-05-04

青年节快乐!今天来分享一个MySQL的小坑:

在MysqlWorkbench中执行如下语句时报错[Error-1175]

update user_ set credit=credit-1 where credit!=0;

这是因为MySQL的safeUpdate模式没有关闭,在没有where主键或者Limit的情况下不允许update。

关闭方式:

set sql_safe_updates=0;  // 当前会话
set global sql_safe_updates=0;  // 全局

如果需要永久关闭,需要在mysqld配置文件中加上一句

通常该文件在/etc/my.cnf

init_connect='SET SQL_SAFE_UPDATES=0'

注意 safeUpdate模式是一种编辑器参数,只与当前编辑器有关。

举个例子,你在本机上的/etc/my.cnf中设置的SQL_SAFE_UPDATES=0只对在命令行中的SQL语句生效,对MysqlWorkbench中的命令不生效;同理在服务器上的/etc/my.cnf与本机的/etc/my.cnf也各不相干;Springboot中的Mapper是没有这种safe模式的,可以随便操作不会报错。