相信很多用了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
還是=''
要根據實際情況來進行區分。