我们来讲解一下MySQL sql_mode的使用。
MySQL sql_mode 是 MySQL 提供的一种配置,用于控制 MySQL 在执行 SQL 语句时的行为。它定义了一组规则,来判断 SQL 语句是否合法,以及如何处理 SQL 语句中的错误。
1. STRICT_TRANS_TABLES
SET sql_mode = 'STRICT_TRANS_TABLES';
INSERT INTO mytable (id, name) VALUES ('1', 'MySQL');
```
2. STRICT_ALL_TABLES
SET sql_mode = 'STRICT_ALL_TABLES';
INSERT INTO mytable (id, name) VALUES ('1', 'MySQL');
```
3. ANSI_QUOTES
SET sql_mode = 'ANSI_QUOTES';
CREATE TABLE "mytable" (
"id" INT NOT NULL PRIMARY KEY,
"name" VARCHAR(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1. 设置全局 sql_mode
在 MySQL 配置文件 my.cnf 或者 my.ini 中,通过设置 sql_mode 的值来控制 MySQL 的 sql_mode 行为。例如:
[mysqld]
...
sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
设置完毕后,需要重启 MySQL 服务,才能生效。
2. 设置会话级别 sql_mode
使用以下 SQL 语句,来设置会话级别 sql_mode:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
在这个会话中,所有的 SQL 语句都会遵循这个 sql_mode 规则。如果需要恢复原来的 sql_mode 值,可以使用以下命令:
SET sql_mode = '';
MySQL sql_mode 可以帮助我们避免在 SQL 语句执行时遇到一些意料之外的坑,提高了数据的完整性。
推荐在开发过程中启用 sql_mode,尽量在生产环境中也开启,尤其对于重要数据的表格,例如账户、财务数据等,更应开启sql_mode来增强数据的安全性。