你知道m(xù)ysql中空值和null值的區(qū)別嗎
最近發(fā)現(xiàn)帶的小伙伴寫sql對于空值的判斷方法不正確,導致程序里面的數(shù)據(jù)產(chǎn)生錯誤,在此進行一下整理,方便大家以后正確的判斷空值。以下帶來示例給大家進行講解。
建表create table test (colA varchar(10) not null,colB varchar(10) null);向test表中插入數(shù)據(jù)
插入colA為null的數(shù)據(jù)
insert into test values (null,1);
此時會報錯,因為colA列不能為null。
插入colB為null的數(shù)據(jù)
insert into test values (1,null);
發(fā)現(xiàn)插入成功。
插入都為空的數(shù)據(jù)
insert into test values (’’,’’);
插入colA為空的數(shù)據(jù)
insert into test values (’’,null);
發(fā)現(xiàn)向colA一列插入空值成功,而colB列既可以插入空值,也可以插入NULL值??偨Y一下,定義為NOT NULL的字段只能插入空值,不能插入null值,而NULL字段可以插入空值,也可以插入null值。
插入都不為空的數(shù)據(jù)
insert into test values (1,2);開始查詢
可以發(fā)現(xiàn) is not null 只會過濾為null值的列,而<>會同時過濾空值和null值,所以要根據(jù)實際情況選擇過濾方式。另外,判斷null值只能用 is null 或 is not null ,不能用 = 或 <>。
特別注意1、在進行count()統(tǒng)計某列的記錄數(shù)的時候,如果采用的NULL值,會別系統(tǒng)自動忽略掉,但是空值是會進行統(tǒng)計到其中的。
2、判斷NULL 用IS NULL 或者 is not null,SQL 語句函數(shù)中可以使用ifnull()函數(shù)來進行處理,判斷空字符用 = 或者 <> 來進行處理
3、對于MySQL特殊的注意事項,對于timestamp數(shù)據(jù)類型,如果往這個數(shù)據(jù)類型插入的列插入NULL值,則出現(xiàn)的值是當前系統(tǒng)時間。插入空值,則會出現(xiàn) ‘0000-00-00 00:00:00’
4、對于空值的判斷到底是使用is null 還是 = 要根據(jù)實際業(yè)務來進行區(qū)分。
5、當使用ORDER BY時,首先呈現(xiàn)NULL值。如果你用DESC以降序排序,NULL值最后顯示。當使用GROUP BY時,所有的NULL值被認為是相等的,故只顯示一行。
總結到此這篇關于mysql中空值和null值的區(qū)別的文章就介紹到這了,更多相關mysql空值和null值的區(qū)別內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!
相關文章:
1. DB2中多種常用功能的解決方法(1)2. mysql 模糊查詢 concat()的用法詳解3. SQL Server 2005-如何在SQL Server用戶自訂函數(shù)中調(diào)用GetDate()函數(shù)4. Mybatis傳入List實現(xiàn)批量更新的示例代碼5. 恢復從 Access 2000、 Access 2002 或 Access 2003 中數(shù)據(jù)庫刪除表的方法6. Sqlite數(shù)據(jù)庫里插入數(shù)據(jù)的條數(shù)上限是5007. 優(yōu)化使用mysql存儲session8. 在SQL Server中顯示表結構的腳本片段9. 深入探討DB2 9.5中的鎖定超時分析新方法10. SQLITE3 使用總結
