炸裂!MySQL 82 张图带你飞 (5)

ERROR_FOR_DIVISION_BY_ZERO:如果这个模式未启用,那么零除操作将会插入空值并且不会产生警告;如果这个模式启用,零除操作插入空值并产生警告;如果这个模式和严格模式都启用,零除从操作将会产生一个错误。

NO_AUTO_CREATE_USER:禁止使用 grant 语句自动创建用户,除非认证信息被指定。

NO_ENGINE_SUBSTITUTION:此模式指定当执行 create 语句或者 alter 语句指定的存储引擎没有启用或者没有编译时,控制默认存储引擎的自动切换。默认是启用状态的。

SQL Mode 三种作用域

SQL Mode 按作用区域和时间可分为 3。个级别,分别是会话级别,全局级别,配置(永久生效)级别

我们上面使用的 SQL Mode 都是 会话级别,会话级别就是当前窗口域有效。它的设置方式是

set @@session.sql_mode='xx_mode' set session sql_mode='xx_mode'

全局域就是当前会话关闭不失效,但是在 MySQL 重启后失效。它的设置方式是

set global sql_mode='xx_mode'; set @@global.sql_mode='xx_mode';

配置域就是在 vi /etc/my.cnf 里面添加

[mysqld] sql-mode = "xx_mode"

配置域在保存退出后,重启服务器,即可永久生效。

SQL 正则表达式

正则表达式相信大家应该都用过,不过你在 MySQL 中用过正则表达式吗?下面我们就来聊一聊 SQL 中的正则表达式。

正则表达式(Regular Expression) 是指一个用来描述或者匹配字符串的句法规则。正则表达式通常用来检索和替换某个文本中的文本内容。很多语言都支持正则表达式,MySQL 同样也不例外,MySQL 利用 REGEXP 命令提供给用户扩展的正则表达式功能。下面是 MySQL 中正则表达式的一些规则。

炸裂!MySQL 82 张图带你飞

下面来演示一下正则表达式的用法

^ 在字符串的开始进行匹配,根据返回的结果来判断是否匹配,1 = 匹配,0 = 不匹配。下面尝试匹配字符串 aaaabbbccc 是否以字符串 a 为开始

select 'aaaabbbccc' regexp '^a';

炸裂!MySQL 82 张图带你飞

同样的,$ 会在末尾处进行匹配,如下所示

select 'aaaabbbccc' regexp 'c$';

炸裂!MySQL 82 张图带你飞

. 匹配单个任意字符

select 'berska' regexp '.s', 'zara' regexp '.a';

炸裂!MySQL 82 张图带你飞

[...] 表示匹配括号内的任意字符,示例如下

select 'whosyourdaddy' regexp '[abc]';

炸裂!MySQL 82 张图带你飞

[^...] 匹配括号内不包含的任意字符,和 [...] 是相反的,如果有任何匹配不上,返回 0 ,全部匹配上返回 1。

select 'x' regexp '[^xyz]';

炸裂!MySQL 82 张图带你飞

n* 表示匹配零个或者多个 n 字符串,如下

select 'aabbcc' regexp 'd*';

炸裂!MySQL 82 张图带你飞

没有 d 出现也可以返回 1 ,因为 * 表示 0 或者多个。

n+ 表示匹配 1 个或者 n 个字符串

select 'aabbcc' regexp 'd+';

炸裂!MySQL 82 张图带你飞

n? 的用法和 n+ 类似,只不过 n? 可以匹配空串

常见 SQL 技巧 RAND() 函数

大多数数据库都会提供产生随机数的函数,通过这些函数可以产生随机数,也可以使用从数据库表中抽取随机产生的记录,这对统计分析来说很有用。

在 MySQL 中,通常使用 RAND() 函数来产生随机数。RAND() 和 ORDER BY 组合完成数据抽取功能,如下所示。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypsyx.html