使用null值
NULL 值就是沒(méi)有值或缺值。允許 NULL 值的列也允許在插入行時(shí)不給出該列的值。不允許 NULL 值的列不接受該列沒(méi)有值的行,換句話說(shuō),在插入或更新行時(shí),該列必須有值。
每個(gè)表列或者是 NULL 列,或者是 NOT NULL 列,這種狀態(tài)在創(chuàng)建時(shí)由表的定義規(guī)定。請(qǐng)看下面的例子:
輸入:
create?table?orders ( order_num??????????int???????????????NOT?NULL?AUTO_INCREMENT, order_date????????datetime???????NOT?NULL, cust_id????????????????int???????????????NOT?NULL, PRIMARY?KEY?(order_num) )ENGINE?=?InnoDB;
分析:這條語(yǔ)句創(chuàng)建本書(shū)中所用的 orders 表。 orders 包含3個(gè)列,分別是訂單號(hào)、訂單日期和客戶ID。所有3個(gè)列都需要,因此每個(gè)列的定義都含有關(guān)鍵字 NOT NULL 。這將會(huì)阻止插入沒(méi)有值的列。如果試圖插入沒(méi)有值的列,將返回錯(cuò)誤,且插入失敗。
下一個(gè)例子將創(chuàng)建混合了 NULL 和 NOT NULL 列的表:
輸入:
create?table?vendors ( vend_id?????????????????int??????????????????NOT?NULL?AUTO_INCREMENT, vend_name?????????char(50)????????????NOT?NULL, vend_address?????char(50)???????????NULL, vend_city?????????????char(50)???????????NULL, vend_state??????????char(5)?????????????NULL, vend_zip?????????????char(10)???????????NULL, vend_country??????char(50)???????????NULL, PRIMARY?KEY?(vend_id?) )ENGINE?=?InnoDB;
分析:這條語(yǔ)句創(chuàng)建本書(shū)中使用的 vendors 表。供應(yīng)商ID和供應(yīng)商名字列是必需的,因此指定為 NOT NULL 。其余5個(gè)列全都允許 NULL 值,所以不指定 NOT NULL 。 NULL 為默認(rèn)設(shè)置,如果不指定 NOT NULL ,則認(rèn)為指定的是 NULL 。
mysql null和空的區(qū)別
理解 NULL 不要把 NULL 值與空串相混淆。 NULL 值是沒(méi)有值,它不是空串。如果指定 ” (兩個(gè)單引號(hào),其間沒(méi)有字符),這在 NOT NULL 列中是允許的。空串是一個(gè)有效的值,它不是無(wú)值。 NULL 值用關(guān)鍵字 NULL 而不是空串指定。