ITEEDU

8.3.4.2. 使用--safe-updates选项

对于新手,有一个有用的启动选项--safe-updates(或--i-am-a-dummy,具有相同的效果)。当你已经发出一个DELETE FROM tbl_name语句但忘记了WHERE子句时很有用。通常情况,这样的语句从表中删除所有行。用--safe-updates,可以通过指定可以识别它们的键值只删除某些行。这样可以帮助防止事故。

若使用--safe-updates选项,mysql连接MySQL服务器时发出下面的语句:

SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000, SQL_MAX_JOIN_SIZE=1000000;

参见13.5.3节,“SET语法”

SET语句有下面的效果:

·         不允许你执行UPDATE或DELETE语句,除非在WHERE子句中指定一个键值约束或提供一个LIMIT子句(或二者皆使用)。例如:

·                UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
·                 
·                UPDATE tbl_name SET not_key_column=val LIMIT 1;

·         所有大的SELECT结果自动限制到1,000行,除非语句包括一个LIMIT子句。

·         放弃可能需要检查1,000,000多行组合的多表SELECT语句。

要将限制指定为1,000和1,000,000之外的值,可以使用--select_limit和--max_join_size选项覆盖默认值:

shell> mysql --safe-updates --select_limit=500 --max_join_size=10000