標籤:一段 ref sub dev acl oracl engine visio for
在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)
另一類的是所謂的strict 模式(具體有很多可選值),設定成strict 模式後,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的sql_mode模式