相信很多用了MySQL很久的人,對這兩個字段屬性的概念還不是很清楚,一般會有以下疑問:
- 字段類型是
NOT NULL,為什么可以插入空值? NOT NULL的效率比高?NULL- 判斷字段不為空的時,到底要
select * from table where column <>還是要用select * from table wherecolumn is not null呢?
帶着上面幾個疑問,我們來深入研究一下NULL 和 NOT NULL 到底有什么不一樣。
首先,我們要搞清楚“空字符串” 和 “NULL” 的概念:
空值是不占用空間的。- MySQL中的
NULL是占用空間的
打個比方來說,你有一個杯子,空值代表杯子是真空的,NULL代表杯子中裝滿了空氣,雖然杯子看起來都是空的,但是區別是很大的。
注意事項:
- 在進行
count()統計某列的記錄數的時候,如果采用的NULL值,系統會自動忽略掉,但是空值是會進行統計到其中的。 - 判斷
NULL用IS NULL或者IS NOT NULL,SQL語句函數中可以使用ifnull()函數來進行處理,判斷空字符用=''或者<>''來進行處理 - 對於
MySQL特殊的注意事項,對於timestamp數據類型,如果往這個數據類型插入的列插入NULL值,則出現的值是當前系統時間。插入空值,則會出現0000-00-00 00:00:00 - 對於空值的判斷到底是使用
is null還是=''要根據實際情況來進行區分。
