MySQL8 语法规范

MySQL8 语法规范,MySQL8教程,MySQL8 语法和 MySQL8 规范等。

【全栈教程】:https://try8.cn/article
教程目录:
教程内容:
最近更新:2023-04-17

一、MySQL8 语法规范介绍

SQL 代码是一把双刃剑,用好了事半功倍,用的不好则很容易产生灾难性的生产事故。因此在编写 SQL 语句时候,遵守基本的语法规范非常重要,因为这可以有效提升 SQL 代码的安全性,并保持高性能与简洁。


二、MySQL8 数据规范

MySQL8 数据库的语法非常丰富,功能也很强,此处不会全部罗列出来,因为后面会出专门的章节讲解,本章节仅从 MySQL8 规范的角度,选取一些典型的语法示例进行讲解。


2.1、字符串

字符串是字节或者字符的序列,字符串使用单引号 ' 或者 双引号 ” 括起来,支持字符串拼接:

'你好,试试吧!'  //单引号示例
"你好,试试吧!"  //双引号示例
'你好,' ' ' '试试吧!'  //字符串拼接示例
select _utf8mb4'string';  //为字符串指定特定字符集
SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;  //为字符串指定特定字符集与排序规则


特殊字符转义:\0 一个 ASCII NUL 字符; \' 单引号 ' 字符; \" 双引号 " 字符; \b 退格字符; \n 换行 字符; \r 一个回车符; \t 制表符; \Z ASCII 26; \\ 反斜杠 \ 字符; \% 一个 % 通配符; \_ 一个 _ 通配符。


转义示例:

# 单引号示例
select '试试吧', '"试试吧"', '""试试吧""', '试试''吧', '\'试试吧';
试试吧 | "试试吧" | ""试试吧"" | 试试'吧 | '试试吧
# 双引号示例
select "试试吧", "'试试吧'", "''试试吧''", "试试""吧", "\"试试吧";
试试吧 | '试试吧' | ''试试吧'' | 试试"吧 | "试试吧
# 换行符示例
SELECT '你好,\n试试吧';
你好,
试试吧


2.2、数字

数字包括整数和浮点数,前面可以由 + 或者 - 表示正负值。按照精确程度分为精确值和近似值,精确值由整数或小数组成,例如:1,1.1,-2,-2.1,+3.10 等;近似值由带尾数和指数的科学计数法表示,例如:1.1E3,1.2E-3 等。


DECIMAL 精确值示例:

try8 DECIMAL(3,2)signed  // 定义 try8 精度为3,小数位为2,取值范围:-9.99 至 9.99
try8 DECIMAL(3,2)unsigned // 定义 try8 精度为3,小数位为2,取值范围:0 至 9.99


FLOAT 近似值示例:

try8 FLOAT(3,2)signed // 定义 try8 精度为3,小数位为2,取值范围:-9.99 至 9.99
try8 FLOAT(3,2)unsigned // 定义 try8 精度为3,小数位为2,取值范围:0 至 9.99


小提示:DECIMAL 是推荐的可以用于金钱的精确值类型,对于要求不高的场景可以使用 FLOAT 近似值类型。


2.3、日期时间

MySQL8 日期和时间值可以用多种格式表示,例如带引号的字符串或数字,具体取决于值的类型。


date:日期格式允许使用较宽松的语法,任何标点符号都可以用作日期部分之间的分割符号,但是在新版 MySQL8 中,建议使用 - 来分割,否则会收到不规范语法提醒。

YYYY-MM-DD  //字符串日期示例:2023-02-27
YYYYMMDD  //数字日期示例:20230227


datetime / timestamp:

datetime 和 timestamp 都是日期和时间组合的类型,格式为:YYYY-MM-DD HH:MM:SS。其中 timestamp 支持存储 UTC 时区,如果遇到无效的时间类型,datetime / timestamp 转换为:0000-00-00 00:00:00 。

  • datetime 取值: '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59';
  • timestamp 取值: '1970-01-01 00:00:01' 到 '2038-01-19 03:14:07'。


小提示:无论是带定界符的字符串还是数字型的日期时间,只要是有意义,MySQL 都可以正常识别。


2.4、布尔值

常量 TRUE 和 FALSE 计算结果分别为 1 和 0,常量名称不区分大小写。


2.5、空值

NULL 值表示:无数据,NULL 可以写在任何数据中,它与 0 或者空的字符串不同。在排序的时候,NULL 值排序位于其它值之前默认升序,在其它值之后进行降序。


三、MySQL8 对象规范

MySQL8 中的一些对象,包括数据库、表、索引、列、别名、视图、存储过程、分区、表空间、资源组和其他对象名称,称为标识符。标识符可以被引用或不被引用,如果标识符包含特殊字符或者是保留字,则必须引用。


3.1、长度限制

标识符使用 Unicode (UTF-8) 存储,下面描述了每种标识符的最大长度,例如:最大的别名长度为 256 个字符。

Database 数据库:64
Table 表:64
Column 列:64
Index 索引:64
Constraint 约束:64
Stored Program 存储过程:64
View 视图:64
Tablespace 表空间:64
Server 服务:64
Log File Group 日志文件组:64
Alias 别名:256
Compound Statement Label 复合语句标签:16
User-Defined Variable 用户定义变量:64
Resource Group 资源组:64


3.2、限定符

对象名称可能是合格的或者不合格的,限定名称至少包含一个限定符,用来覆盖缺失的上下文信息。

  • 非限定名称由单个标识符组成,限定名称由多个标识符组成;
  • 多个标志符使用 . 字符分隔,初始标志符充当限定符;
  • 限定符为单独的标记,不需要相邻,例如:tb.col 和 tb .col;
  • 多个标志符需要引用时请单独使用,例如:`tb`.`col`,而非:`tb.col`;


限定符示例:

# 数据库示例
selct * from tb_name;
selct * from db_name.tb_name;
# 触发器示例
create trigger mytrigger ... on mytable ...;
create trigger mytrigger ... on mydb.mytable ...;


3.3、大小写

底层操作系统的大小写敏感性在数据库、表和触发器名称的大小写敏感性中起着一定的作用,这意味着在 Windows 中不区分大小写,但在大多数 Unix 变体中区分大小写,macOS 又比较特殊。

  • Windows:不区分大小写;
  • Unix:大多数是区分大小写;
  • macOS:HFS+ 不区分大小写,UFS 区分大小写。


其它须知:分区、子分区、列、索引、存储例程、事件和资源组名称在任何平台上都不区分大小写,列别名也不区分大小写,但是,日志文件组的名称区分大小写,这与标准 SQL 不同。


四、MySQL8 语法规范 总结

MySQL8教程 - MySQL8 语法规范,主要用于介绍 MySQL 和 MySQL8 数据库,从 MySQL8 语法开始,逐步到 MySQL8 规范讲解等,通篇实用易懂,让 MySQL8 入门更加快速和简单。


《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。