本节介绍MySQL与ANSI / ISO SQL标准的关系。MySQL Server对SQL标准有许多扩展,在这里您可以找到它们的含义以及如何使用它们。您还可以找到有关MySQL Server缺少的功能以及如何解决某些差异的信息。
自1986年以来,SQL标准一直在发展,并且存在多个版本。在本手册中,“ SQL-92 ”是指1992年发布的标准。“ SQL:1999 ”, “ SQL:2003 ”,“ SQL:2008 ”和 “ SQL:2011 ”是指该版本的标准。相应的年份,最后一个是最新版本。我们使用短语“ SQL标准 ” 或“ 标准SQL ” 随时表示SQL标准的当前版本。
我们对该产品的主要目标之一是继续努力使其符合SQL标准,但又不牺牲速度或可靠性。如果这大大增加了MySQL服务器在我们大部分用户群中的可用性,则我们不怕添加SQL扩展或对非SQL功能的支持。该HANDLER
接口是这一战略的一个例子。请参见第13.2.4节“ HANDLER语句”。
我们将继续支持事务性和非事务性数据库,以满足关键任务24/7的使用和繁重的Web或日志记录的使用。
MySQL Server最初旨在与小型计算机系统上的中型数据库(10-100百万行,或每个表约100MB)一起使用。今天,MySQL服务器可以处理TB级的数据库。
尽管MySQL复制功能提供了重要的功能,但我们的目标不是实时支持。
MySQL支持ODBC级别0到3.51。
MySQL使用NDBCLUSTER
存储引擎支持高可用性数据库集群 。请参见 第22章,MySQL NDB Cluster 8.0。
我们实现了支持大多数W3C XPath标准的XML功能。请参见第12.12节“ XML函数”。
MySQL支持RFC 7159定义并基于ECMAScript标准(ECMA-262)的本地JSON数据类型。请参见 第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 Server,请 使用该选项启动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节“服务器命令选项”。