分类: MySQL
MySQL中sql_safe_updates安全模式说明 - MySQL

在MySQL中,sql_safe_updates 是一个会话(或全局)级别的系统变量,用于防止意外地对大量数据执行更新或删除操作,尤其在开发或测试环境中起到保护作用。它通常和 MySQL 客户端(如 mysql 命令行)一起使用。

sql_safe_updates 的作用
当 sql_safe_updates = 1(开启)时,MySQL 会限制以下类型的 UPDATE 和 DELETE 语句:

  没有 WHERE 条件 的 UPDATE 或 DELETE 语句会被拒绝。
  WHERE 条件中未使用索引(即无法通过索引快速定位行)的语句会被拒绝。
  没有 LIMIT 子句 且可能影响大量行的语句可能被拒绝(不同版本行为略有差异)。

安全模式默认是关闭的。

mysql> show variables like 'sql_safe_updates';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| sql_safe_updates | OFF |
+------------------+-------+
1 row in set (0.01 sec)

mysql> SELECT @@sql_safe_updates;
+--------------------+
| @@sql_safe_updates |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.00 sec)

开启与关闭方式:

-- 开启安全更新模式
SET sql_safe_updates = 1;

-- 关闭安全更新模式
SET sql_safe_updates = 0;

-- 全局级别(影响新连接):
SET GLOBAL sql_safe_updates = 1;  -- 需要 SUPER 权限

注意事项:
sql_safe_updates 是会话变量,不影响其他连接。
即使关闭了 sql_safe_updates,也建议始终在 UPDATE/DELETE 中使用明确的 WHERE 条件。
Workbench默认是开启安全模式的,是为了人为误操作。


相关博文:

发表新评论