MySQL与ANSI/ISO SQL标准的关系。MySQL Server对SQL标准有许多扩展,在这里您可以找到它们是什么以及如何使用它们。您还可以找到有关MySQL Server缺少的功能的信息,以及如何解决一些差异。
SQL标准自1986年以来一直在演进,存在多个版本,在本文中,“SQL-92”指1992年发布的标准,“SQL: 1999”、“SQL:2003”、“SQL:2008”、“SQL:2011”详情可见相应年份发布的标准版本,最后一个为最新版本,我们使用短语“SQL标准”或“标准SQL”来表示SQL标准的当前版本。
我们产品的主要目标之一是继续努力符合SQL标准,但不牺牲速度或可靠性。如果这大大提高了MySQL服务器对我们大部分用户群的可用性,我们不怕为SQL或支持非SQL功能添加扩展。
我们继续支持事务性和非事务性数据库,以满足关键任务24/7使用和大量Web或日志记录使用。
MySQL服务器最初设计用于小型计算机系统上的中型数据库(1亿行,或每个表约100MB)。今天MySQL服务器处理TB大小的数据库。
我们的目标不是实时支持,尽管MySQL复制功能提供了重要的功能。
MySQL支持ODBC级别0到3.51。
MySQL支持使用NDBCLUSTER存储引擎的高可用性数据库聚类。
我们实现了支持大多数W3C XPath标准的XML功能。
MySQL支持RFC 7159定义的基于ECMAScript标准(ECMA-262)的原生JSON数据类型。。MySQL还实现了SQL: 2016标准预发布草案指定的SQL/JSON函数的子集。
选择SQL模式
MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端不同地应用这些模式,具体取决于sql_mode系统变量的值。DBA可以设置全局SQL模式来配合站点服务器的运行需求,每个应用程序可以根据自己的需求设置其会话SQL模式。
模式影响MySQL支持的SQL语法及其执行的数据验证检查。这使得在不同环境中使用MySQL以及与其他数据库服务器一起使用MySQL变得更加容易。
在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选项也设置事务隔离性级别。