MySQL字段屬性NUll的注意點


MySQL字段屬性應該盡量設置為NOT NULL

除非你有一個很特別的原因去使用 NULL 值,你應該總是讓你的字段保持 NOT NULL。這看起來好像有點爭議,請往下看。

空值("") 和 “NULL” 的概念:

   1)空值是不占用空間的

  2)MySQL中的NULL其實是占用空間的

所謂的NULL就是什么都沒有,連\0都沒有,\0在字符串中是結束符,但是在物理內存是占空間的,等於一個字節,而NULL就是連這一個字節都沒有。

NULL不能簡單=判斷

其次,在數據庫里是嚴格區分的,任何數跟NULL進行運算都是NULL, 判斷值是否等於NULL,不能簡單用=,而要用IS NULL關鍵字。
可以看一個列子,我創建一個表,字段包括id 和age:

create table t1(id int , age unique);

然后執行十次:

insert into t1(id) values(1);

給表只添加id,age字段默認值是NULL,發現可以一直添加,這是為什么呢!,我明明設置了unique屬性啊,這就是因為任何數跟NULL進行運算都是NULL, 判斷值是否等於NULL,不能簡單用=,而要用IS NULL關鍵字。

3、not null指是NULL,而不是字符串空值('')

數據庫的字段col1設為NOT NULL, 僅僅說明該字段不能為NULL, 也就是說只有在

INSERT INTO table1(col1) VALUES(NULL);

這種情況下數據庫會報錯,而

INSERT INTO table1(col1) VALUES(‘’);

不會報錯。

(如果字段是自增ID,第一句不會報錯,這不能說明是可以為NULL,而是 數據庫系統會根據ID設的缺省值填充,或者如果是自增字段就自動加一等缺省操作。)

4、盡量設置成not null原因

1、含有空值的列很難進行查詢優化,而且對表索引時不會存儲NULL值的,所以如果索引的字段可以為NULL,索引的效率會下降很多。因為它們使得索引、索引的統計信息以及比較運算更加復雜。你應該用0、一個特殊的值或者一個空串代替空值。

2、聯表查詢的時候,例如LEFT JOIN table2,若沒有記錄,則查找出的table2字段都是null。假如table2有些字段本身可以是null,那么除非把table2中not null的字段查出來,否則就難以區分到底是沒有關聯記錄還是其他情況


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM