13

我相信我在某处读到有一个 mysql 配置设置可以防止通过控制台更新行,除非存在 WHERE 子句。

我无法在文档中找到它,是否存在该选项?

4

3 回答 3

12

那就是 MYSQL 安全更新模式。

在这里检查。

还有--safe-updates选项。

于 2012-09-06T02:58:35.073 回答
8

SET SQL_SAFE_UPDATES=0;在运行查询之前。

请参阅有关安全模式的MySQL 提示。

对于初学者来说,一个有用的启动选项是 --safe-updates(或 --i-am-a-dummy,具有相同的效果)。这对于您可能已经发出 DELETE FROM tbl_name 语句但忘记了 WHERE 子句的情况很有帮助。通常,这样的语句会从表中删除所有行。使用 --safe-updates,您只能通过指定标识行的键值来删除行。这有助于防止事故。

除非您在 WHERE 子句中指定键约束或提供 LIMIT 子句(或两者),否则不允许执行 UPDATE 或 DELETE 语句。例如:

UPDATE tbl_name SET not_key_column=val WHERE key_column=val;

UPDATE tbl_name SET not_key_column=val LIMIT 1;
于 2012-09-06T02:59:42.827 回答
2

来自 MySQL 文档:http ://dev.mysql.com/doc/refman/5.5/en/mysql-tips.html

"4.5.1.6.2. 使用 --safe-updates 选项

对于初学者来说,一个有用的启动选项是 --safe-updates(或 --i-am-a-dummy,具有相同的效果)。这对于您可能已经发出 DELETE FROM tbl_name 语句但忘记了 WHERE 子句的情况很有帮助。通常,这样的语句会从表中删除所有行。使用 --safe-updates,您只能通过指定标识行的键值来删除行。这有助于防止事故。

[...]

除非您在 WHERE 子句中指定键约束或提供 LIMIT 子句(或两者兼有),否则不允许执行 UPDATE 或 DELETE 语句。”

于 2012-09-06T03:00:53.877 回答