标签:sql str dev 说明 glob 操作 tab 连接 pes
SQL模式影响MySQL支持的SQL语法和执行的数据验证检查。通过修改sql_mode变量的值来改变SQL模式。
SQL模式可以在全局级别下设置,也可以在会话级别下设置。在数据库启动时和数据库运行时都可以对sql_mode的值进行修改。
在命令行中使用--sql_mode=‘modes‘选项,或者在配置文件中使用sql_mode="modes"。
modes是一个以逗号分隔的模式的列表。
要清除SQL模式,将它设置为一个空的字符串,例如sql_mode=""
使用SET语句来更改sql_mode的值,例如:
SET GLOBAL sql_mode = ‘modes‘;
SET SESSION sql_mode = ‘modes‘;
设置全局变量的值需要SUPER权限,设置后应用到之后所有客户端连接的操作。
设置session变量只应用于当前客户端,每个客户端都可以在任何时候更改它的sessionSQL模式。
要确定当前使用的SQL模式,使用以下语句进行查询
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
主要的sql_mode的值为以下几种:
sql模式可以大致分为以下几类
在MySQL5.7.4到MySQL5.7.7中,严格模式包括ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE和NO_ZERO_IN_DATE的效果。
在MySQL5.7.4以前版本中,以上三个模式被弃用
在MySQL5.7.4到MySQL5.7.7中,以上三个模式不产生作用,他们的效果包含在严格模式中。
在MySQL5.7.8及以后版本中,以上三个模式才有自己单独的作用,而不是严格模式的一部分。但是,他们应该和严格模式一起使用,并且默认情况下他们都是开启的。如果使用严格模式而不使用上述模式会产生警告,如果使用上述模式中的任何一个但是不启用严格模式也会产生警告。
由于以上三个模式以弃用,在后续的MySQL版本中,他们作为一个单独的模式名会被删除,并且他们的效果将包含在严格模式中。
相同)而不是作为字符串的引用符号。在启用此模式的情况下,仍然可以使用
作为引用标识符,但是不能使用双引号来引用文本字符串。NO_UNSIGNED_SUBTRACTION
对于整数之间的减法,如果一个值的类型是UNSIGNED,默认生成一个无符号整型的结果,但是如果结果是个负数,就会出现错误
如果启用NO_UNSIGNED_SUBTRACTION,结果为负时不会报错
IGNORE_SPACE
在函数名和(中间允许空格。这将导致内置函数名被当作保留字处理。因此,与函数名相同的标识符必须被引用。
例如,因为存在COUNT()函数,直接使用count作为表名会产生错误
mysql> CREATE TABLE count (i INT);
ERROR 1064 (42000): You have an error in your SQL syntax
应该将表名引用起来:
mysql> CREATE TABLE
count
(i INT);
Query OK, 0 rows affected (0.00 sec)
以下模式是对上述SQL模式完整列表中的部分组合的缩写
名称 | 完整列表 |
---|---|
ANSI | REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE,和 (在MySQL 5.7.5) ONLY_FULL_GROUP_BY |
DB2 | PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS |
MSSQL | PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS |
POSTGRESQL | PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS |
ORACLE | PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER |
MAXDB | PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER |
TRADITIONAL | STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION |
标签:sql str dev 说明 glob 操作 tab 连接 pes
原文地址:http://blog.51cto.com/13540167/2072349