mysql的sql_mode模式
2015-12-11 14:19
507 查看
在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设置为空或仅
另一类的是所谓的严格模式(具体有很多可选值),设置成严格模式后,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
表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
相关文章推荐
- Mysql 事务的基本使用与基本原理
- MySQL LOAD DATA导入TXT文件
- PXC(Percona XtraDB Cluster)安装以及问题解决方法
- MYSQL外键增删改查
- mysql 存储过程 汉字取拼音或者首字母
- mysql的unix_timestamp
- MYSQL查看表格字段属性
- MySQL5.6.26升级到MySQL5.7.9实战方案
- MySQL5.6.26升级到MySQL5.7.9实战方案
- MySql中把一个表的数据插入到另一个表中的实现
- Mysql视图
- 简单谈谈MySQL的loose index scan
- 记录-MySQL中的事件调度Event Scheduler
- MySQL-5.6.13免安装版配置方法
- MySQL中有关TIMESTAMP和DATETIME的总结
- Mysql卸载安装
- 性能调优:mysql之left join
- 10015---MySQL--innodb_flush_log_at_trx_commit参数
- Mysql连接出错问题
- 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法