如何在MySQL中永久设置sql_mode?
当我们在使用MySQL时,有时为了保护数据完整性以及避免出现意外错误,需要在MySQL中设置sql_mode来限制一些不规范的操作。但是在默认情况下,MySQL的sql_mode是没有开启的。那么在MySQL中如何永久设置sql_mode呢?下面让我们一起来了解一下。
阅读更多:MySQL 教程
什么是sql_mode?
sql_mode是MySQL的一个参数,它控制MySQL服务器的SQL语法和数据校验行为,对于查询、插入、更新、删除等操作都起着重要的作用。通过设置sql_mode,我们可以限制一些不规范的操作,比如:
- 禁止使用未定义的变量名
- 禁止将NULL插入非NULL列中
- 当查询、更新时,如果某个列的值为NULL,则结果集返回NULL而不是空字符串
- 禁止使用未定义的列名
等等。
设置sql_mode的方法
在MySQL中,设置sql_mode有两种方法:一种是在连接时间设置,一种是在MySQL启动参数中设置。
方式一:在连接时间设置
我们可以在连接MySQL数据库时,设置sql_mode。这种方式设置的sql_mode只对当前连接有效,对于其他的连接则不会生效。
可以使用如下命令来设置:
SET SESSION sql_mode='YOUR_SQL_MODE';
其中YOUR_SQL_MODE是你想要设置的sql_mode,多个sql_mode用逗号隔开。
例如:
SET SESSION sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO';
方式二:在MySQL启动参数中设置
我们也可以在MySQL的启动参数中,设置sql_mode。这种方式是在MySQL服务启动时就会生效,在后续的所有连接中都有效。
方法如下:
- 打开MySQL的配置文件my.cnf
sudo vi /etc/mysql/my.cnf
- 在[mysqld]节点下面添加如下行:
sql_mode = 'YOUR_SQL_MODE'
其中YOUR_SQL_MODE是你想要设置的sql_mode,多个sql_mode用逗号隔开。
例如:
[mysqld]
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO
- 保存文件,并重启MySQL服务:
sudo service mysql restart
查看当前sql_mode
我们可以使用以下命令来查看当前MySQL的sql_mode设置:
SELECT @@SESSION.sql_mode;
该命令返回的是当前连接的sql_mode设置。
如果要查看MySQL服务器的sql_mode设置,我们可以使用如下命令:
SELECT @@GLOBAL.sql_mode;
该命令返回的是MySQL服务器全局的sql_mode设置。
永久设置sql_mode
如果我们想要在MySQL中永久设置sql_mode,可以使用前面的方式二,在MySQL的启动参数中设置。
当MySQL服务启动时,会加载配置文件my.cnf中的设置,并将其作为默认设置。这样做,就能够在MySQL服务重新启动时,自动应用我们所设置的sql_mode了。
结论
通过本文的介绍,我们了解了在MySQL中如何设置sql_mode参数的方法。这些方法可以帮助我们保护数据完整性,避免一些意外错误的发生,让我们的数据库使用更加安全可靠。