# 其他重要的 SQL 模式

__*ANSI SQL 模式*__
__*TRANDITIONAL SQL 模式*__
__*ORACLE SQL 模式*__
__*ONLY_FULL_GROUP_BY SQL 模式*__
__*NO_ZERO_DATE SQL 模式*__
__*ERROR_FOR_DIVISION_BY_ZERO SQL 模式*__
__*NO_ENGINE_SUBSTITUTION SQL 模式*__

+ 组合模式
  + `ANSI`: 更改语法和行为以更好地符合标准 SQL
  + `TRANDITIONAL`: 在这种模式下,TiDB 的行为更像 "传统" 的 SQL 数据库系统
  + `ORACLE`: `PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER` 
+ 单一行为模式
  + `ONLY_FULL_GROUP_BY`: 当 SELECT 列表引用不在 GROUP BY 子句中的列时,无法执行
  + `NO_ZERO_DATE`: 不允许使用诸如 '0000-00-00' 这样的日期 
  + `ERROR_FOR_DIVISION_BY_ZERO`: 返回错误而不是 NULL 
  + `NO_ENGINE_SUBSTITUTION`:  TiDB 仅支持语法,无实际作用
-----------------------------------------------------------------

组合模式

ANSI 和传统 SQL 模式是 MySQL 中的组合模式,可启用多种模式。 

ANSI 模式
某些模式会更改 SQL 语法的处理方式,而 ANSI 模式包含了其中的几种模式。默认情况下,MySQL 内置函数不是保留字,因此即使有 COUNT () 函数,也可以创建名为 count 的列。"(" 字符必须紧跟在名称 "COUNT" 之后才能将其标识为函数。IGNORE_SPACE SQL 模式允许在函数名和 "(" 字符之间使用空格。这会导致内置函数名称被视为保留字。因此,必须用引号将标识符（如列名）与函数名相同的标识符括起来。默认情况下,标识符引号是反引号 ( `),但 ANSI_QUOTES SQL 模式允许您使用双引号 (") 来实现相同的目的。

单一行为模式
大多数 SQL 模式会更改单个行为。这些包括:
NO_ZERO_DATE,它不允许 MySQL 通常允许的诸如 "0000-00-00" 之类的日期,即使在严格模式下也是如此。
ERROR_FOR_DIVISION_BY_ZERO,它会引发错误并中止任何试图将值除以零的语句。如果未启用此模式,MySQL 会将除数为零的计算结果为 NULL 并发出警告。

注意:有关服务器 SQL 模式的完整列表,请参阅:https://dev.mysql.com/doc/mysql/en/sql-mode.html。


- ANSI	等同于 REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE（仅语法支持）
- TRADITIONAL	等同于 STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER（仅语法支持）
- ORACLE	等同于 PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER（仅语法支持）

- ONLY_FULL_GROUP_BY	如果 GROUP BY 出现的列并没有在 SELECT,HAVING,ORDER BY 中出现,此 SQL 不合法,因为不在 GROUP BY 中的列被查询展示出来不符合正常现象（支持)
- NO_ZERO_DATE	在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告（支持）
- ERROR_FOR_DIVISION_BY_ZERO	若启用该模式,在 INSERT 或 UPDATE 过程中,被除数为 0 值时,系统产生错误.若未启用该模式,被除数为 0 值时,系统产生警告,并用 NULL 代替（支持）
- NO_ENGINE_SUBSTITUTION	如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎（仅语法支持）

详细信息,请参阅:`https://docs.pingcap.com/tidb/stable/sql-mode`

