小技巧快速修改sql_mode

##

小技巧快速修改sql_mode


1、sql_mode概述

MySQL服务器可以在不同的SQL模式下运行,并且可以根据sql_mode系统变量的值对不同的客户端应用不同的模式。DBA可以设置全局SQL模式以匹配站点服务器的操作要求,每个应用程序可以根据自己的要求设置其会话SQL模式。

模式影响MySQL支持的SQL语法和它执行的数据验证检查。这使得在不同的环境中使用MySQL以及与其他数据库服务器一起使用MySQL变得更加容易。

2、sql_mode信息

MySQL 8.0默认的sql_mode有:

ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, and NO_ENGINE_SUBSTITUTION.

当然还有一些其他的sql_mode值,这里不一一列举。

3、修改sql_mode

在日常的MySQL数据库维护中,可能会遇到需要修改sql_mode的情况,那么如何修改呢,常见的就是在基于session、global、参数文件去修改。

案例为添加一个值(NO_BACKSLASH_ESCAPES),

3.1、常规操作

先查询

root@localhost [(none)] (12:10:29) >show variables like 'sql_mode'G
*************************** 1. row ***************************
Variable_name: sql_mode
        Value: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)

再添加,persist/session/global都可以

root@localhost [(none)] (12:15:16) >set persist sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)

root@localhost [(none)] (12:15:41) >set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)

root@localhost [(none)] (12:29:11) >set global sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,NO_BACKSLASH_ESCAPES';
Query OK, 0 rows affected (0.00 sec)

只需要简单复制张贴就可以了,但是没点X操作的DBA能行吗?不行

3.2、快速操作

同样是先查询

root@localhost [(none)] (12:32:12) >show variables like 'sql_mode'G
*************************** 1. row ***************************
Variable_name: sql_mode
        Value: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
1 row in set (0.00 sec)

添加,三种情况都使用

root@localhost [(none)] (12:34:12) >set persist sql_mode=concat('NO_BACKSLASH_ESCAPES,',@@sql_mode);
Query OK, 0 rows affected (0.01 sec)

root@localhost [(none)] (12:34:28) >set session sql_mode=concat('NO_BACKSLASH_ESCAPES,',@@sql_mode);
Query OK, 0 rows affected (0.00 sec)

root@localhost [(none)] (12:34:39) >set global sql_mode=concat('NO_BACKSLASH_ESCAPES,',@@sql_mode);
Query OK, 0 rows affected (0.00 sec)

root@localhost [(none)] (12:34:46) >q
Bye

检查

[root@db02 ~]# mysql
root@localhost [(none)] (12:34:50) >show variables like 'sql_mode'G
*************************** 1. row ***************************
Variable_name: sql_mode
        Value: ONLY_FULL_GROUP_BY,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
1 row in set (0.01 sec)
root@localhost [(none)] (12:34:57) >

4、总结

concat为常用函数,这里做了一个简单的引用,当然数据库中还有其他参数可以使用concat来进行设置,等待我们去探索。


原文始发于微信公众号(库海无涯):小技巧快速修改sql_mode

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/241286.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!