# 1.7 MySQL 标准合规性

1.7.1 MySQL 对标准 SQL 的扩展

1.7.2 MySQL 与标准 SQL 的区别

1.7.3 MySQL 如何处理约束

本节介绍 MySQL 如何与 ANSI/ISO SQL 标准相关联。MySQL Server 对 SQL 标准有很多扩展,在这里您可以了解它们是什么以及如何使用它们。您还可以找到有关 MySQL 服务器缺少的功能以及如何解决一些差异的信息。

SQL 标准自 1986 年以来一直在发展,并且存在多个版本。本手册中,“SQL-92”指的是 1992 年发布的标准。“SQL:1999”、“SQL:2003”、“SQL:2008”、“SQL:2011”指的是 1992 年发布的标准版本。相应的年份,最后一个是最新版本。我们在任何时候都使用短语“SQL 标准”或“标准 SQL”来表示 SQL 标准的当前版本。

我们对该产品的主要目标之一是继续努力符合 SQL 标准,但不牺牲速度或可靠性。如果这大大增加了 MySQL 服务器对我们大部分用户群的可用性,我们不害怕添加 SQL 扩展或对非 SQL 功能的支持。这处理程序界面就是这种策略的一个例子。看第 13.2.4 节,“处理程序语句”.

我们继续支持事务性和非事务性数据库,以满足关键任务 24/7 使用和大量 Web 或日志记录使用。

MySQL Server 最初设计用于在小型计算机系统上处理中型数据库(10-1 亿行,或每个表约 100MB)。今天,MySQL 服务器处理 TB 级的数据库。

尽管 MySQL 复制功能提供了重要的功能,但我们的目标不是实时支持。

MySQL 支持 ODBC 级别 0 到 3.51。

MySQL 使用NDBCLUSTER存储引擎。看第 23 章,MySQL NDB 集群 8.0.

我们实现了支持大多数 W3C XPath 标准的 XML 功能。看第 12.12 节,“XML 函数”.

MySQL 支持 RFC 7159 定义的原生 JSON 数据类型,并基于 ECMAScript 标准 (ECMA-262)。看第 11.5 节,“JSON 数据类型”.MySQL 还实现了 SQL:2016 标准的预发布草案指定的 SQL/JSON 函数的子集;看第 12.18 节,“JSON 函数”, 了解更多信息。

# 选择 SQL 模式

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

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

有关设置 SQL 模式的详细信息,请参阅第 5.1.11 节,“服务器 SQL 模式”.

# 在 ANSI 模式下运行 MySQL

要以 ANSI 模式运行 MySQL 服务器,请启动mysqld--ansi选项。以 ANSI 模式运行服务器与使用以下选项启动服务器相同:

--transaction-isolation=SERIALIZABLE --sql-mode=ANSI

要在运行时达到相同的效果,请执行以下两条语句:

SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'ANSI';

你可以看到设置sql_mode系统变量为'ANSI'启用与 ANSI 模式相关的所有 SQL 模式选项,如下所示:

mysql> SET GLOBAL sql_mode='ANSI';
mysql> SELECT @@GLOBAL.sql_mode;
        -> 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'

以 ANSI 模式运行服务器--ansi与将 SQL 模式设置为'ANSI'因为--ansi选项还设置事务隔离级别。

第 5.1.7 节,“服务器命令选项”.