您的位置:首页 > 数据库 > MySQL

MySQL sql_model问题研究

2016-12-20 14:52 204 查看
1
数据库在默认情况下是不开启 sql_mode 的
服务器可以运行不同的sql mode ,设置sql_mode 的系统变量, 根据不同客户设置不同的sql mode 。
dba可以设置全局的sql mode 应用于整个数据库。 每个应用程序可以设置其会话的sql mode 满足自身的需求。
sql mode 影响mysql对sql语句的支持和验证检验sql执行的数据。
查看sql_mode的设置
全局 SELECT @@GLOBAL.sql_mode;
当前会话 SELECT @@SESSION.sql_mode;
设置sql_mode 全局设置还可以在mysql的配置文件my.cnf中设置。
全局 SET GLOBAL sql_mode = 'modes';
当前会话 SET SESSION sql_mode = 'modes';
/*************重要的sql 模式
最重要的sql_mode值
ANSI
这种模式改变语法和行为使sql更贴近标准的sql语法。**************/
2
支持的sql_mode 模式
ALLOW_INVALID_DATES
该选项并不完全对日期的合法性进行检查,只检查月份是否在1-12 之间和日期是否在1-31之间,该模式仅对date和datetime 模式有效,而对timestamp 无效,因为timestamp总是要求一个合法的输入。
服务器要求月和天值是合法的,而不只是在1 - 12和1 - 31日。不启动严格,无效的日期等 '2004-04-31'被转换成 '0000-00-00'并生成一个警告。启用了严格模式、无效的日期生成一个错误。
ANSI_QUOTES
启用 ANSI_QUOTES 后,不能使用双引号来引用字符,双引号将被识别为字符。可以使用单引号



ERROR_FOR_DIVISION_BY_ZERO
在insert 或者update过程中,如果数据被灵除(或mod(x,0)),则产生错误(否则为警告),如果未使用该模式,那么数据被零除时mysql返回null,如果用到insert ignore或者 update ignore 中,mysql生成被零除警告,但操作结果返回null
对数据库的操作效果也取决于严格模式的启用
如果没有启用这个模式,除零插入 NULL并产生没有警告。
如果启用了此模式,除零插入 NULL并产生一个警告。
HIGH_NOT_PRECEDENCE
NOT操作符的优先顺序是表达式例如NOT a BETWEEN b AND c被解释为NOT (a BETWEEN b AND c)。在一些旧版本MySQL中, 表达式被解释为(NOT a) BETWEEN b AND c。启用HIGH_NOT_PRECEDENCESQL模式,可以获得以前的更高优先级的结果。



NO_AUTO_CREATE_USER
防止GRANT自动创建新用户,除非还指定了密码。
NO_AUTO_VALUE_ON_ZERO 禁用
NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL或0生成下一个序列号。
NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。
如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。
NO_BACKSLASH_ESCAPES
禁用反斜线字符(‘\’)做为字符串内的退出字符。启用该模式,反斜线则成为普通字符。



NO_DIR_IN_CREATE
创建表时,忽视所有INDEX DIRECTORY和DATA DIRECTORY指令。该选项对从复制服务器有用。
NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,抛出错误,默认情况下用默认的存储引擎。 可以防止自动替换存储引擎。
没弄明白的选项
1 NO_FIELD_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。该模式在可移植模式(portability mode)下用于mysqldump。
2 NO_KEY_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。该模式在可移植模式(portability mode)下用于mysqldump。
3 NO_TABLE_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。该模式在可移植模式(portability mode)下用于mysqldump。
NO_UNSIGNED_SUBTRACTION
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MySQL model 问题研究