mysql的sql_mode模式

在oracle或sqlserver中,如果某个表的字段设置成not null,insert或update时不给这个字段赋值,比如下面这样:

表t_test(id,name)中id,name都不允许为空,

insert into t_test(name) values('xxx') 必然报错,这是天经地义的事情,但是在mysql中这是有可能成功,具体取决于sql_mode的设置

 

大概上讲,sql_mode可以分为二大类:

一类是所谓的宽松无敌模式(my.ini中sql_mode设置为空或仅NO_ENGINE_SUBSTITUTION), 这种模式下,not null 的字段,在insert或update时不设置值也能成功,db在插入时,会自动给默认值,比如int会给0值,甚至可以把abc赋值给int型的字段(当然,db会自动忽略该值,变成默认值0)

 

另一类的是所谓的严格模式(具体有很多可选值),设置成严格模式后,mysql就跟传统的oracle、sqlserver表现一致了,这也是我个人强烈推荐的模式。

 

最后,无耻的从网上抄一段贴在这里备份:

 

如果使用mysql,为了继续保留大家使用oracle的习惯,可以对mysql的sql_mode设置如下:

 

在my.cnf添加如下配置

[mysqld]

sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,

ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

 

 

参考:

http://www.2cto.com/database/201304/202192.html

http://dev.mysql.com/doc/refman/5.5/en/sql-mode.html

 

时间: 2024-10-21 13:14:24

mysql的sql_mode模式的相关文章

Mysql SQL服务器模式介绍_Mysql

mysql SQL服务器模式 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用--sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(--sql-mode =""

如何解决mysql的master-slave模式中ReplicationDriver的使用问题

/** * 作者:张荣华 * 日期:2008-6-19 **/ 前言: 之前downpour有一个贴(http://www.iteye.com/topic/143714)讨论了在java中如何使用mysql的master-slave模式(master-slave模式的介绍见Qieqie的这个贴:http://www.iteye.com/topic/162717),其中readonly大大提到我们可以使用ReplicationDriver来从connection层把read或者write操作分开.

mysql启用skip-name-resolve模式一些问题小结

mysql 启用skip-name-resolve模式时出现Warning的处理办法,当前如果你的授权是针对所有主机的你不会遇到该问题 在优化MYSQL配置时,加入 skip-name-resolve ,在重新启动MYSQL时检查启动日志,发现有警告信息. 121126 11:57:22 [Warning] 'user' entry 'root@localhost.localdomain' ignored in --skip-name-resolve mode. 121126 11:57:22

看mysql手册中模式(SQL_MODE)学到的知识

使用phpmyadmin导出sql的时候,常常会出现SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";的语句.通过看sql手册,明白了这里 设置的含义. 那么可以回答几个疑惑性问题了一.设置sql模式有什么作用?会产生什么方面的影响?模式定义mysql会支持哪些sql语法.以及应执行哪种数据验证检查.最终达到的目标:适应在不同环境中适应mysql,因为可 以根据各自的程序不同设置对于德sql操作模式.输入如下语句可以知道,当前使用的sql模式,select @@

mysql中binlog_format模式与配置详解

① STATEMENT模式(SBR) 每一条会修改数据的sql语句会记录到binlog中.优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能.缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题) ② ROW模式(RBR) 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了.而且不会出现

mysql结构和模式优化

1. 保持你的数据库整理性. 2. 旧数据归档 – 删除多余的行返回或搜索查询. 3. 将您的数据加上索引. 4. 压缩文字和BLOB数据类型 – 以节省空间和减少磁盘读取次数. 5. UTF 8和UTF16都低于latin1执行效率. 6. 有节制地使用触发器. 7. 冗余数据保持到最低限度 – 不重复不必要的数据. 8. 使用链接表,而不是扩展行. 9. 注意数据类型,在您的真实数据中,尽可能使用最小的一个. 10. 如果其他数据经常被用于查询时,而BLOB / TEXT数据不是,就把BLO

MySQL 的安全更新模式

删除mysql 的一个表的数据的时候报告如下错误: mysql> delete from upload_images; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column mysql> show variables like '%sql_safe%'; +------------------+------

在CentOS 7上配置MySQL的主从复制模式 (Master-Slave Replication)

MySQL的主从复制广泛用于数据库备份.故障转移.数据分析等场合. MySQL主从复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志.从服务器从主服务器接收已经记录到其二进制日志的更新,当一个从服务器连接主服务器时,主服务器从日志中读取最后一次成功更新的位置,从服务器接收从那时起发生的更新,并在本机上执行相同的更新,然后等待主服务器通知新的更新.从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新. 测试环境

mysql启用skip-name-resolve模式时出现Warning的处理办法_Mysql

120726 11:57:22 [Warning] 'user' entry 'root@localhost.localdomain' ignored in --skip-name-resolve mode. www.jb51.net 120726 11:57:22 [Warning] 'user' entry '@localhost.localdomain' ignored in --skip-name-resolve mode. skip-name-resolve是禁用dns解析,避免网络D