Navicat 部落格

關聯式資料庫系統中的 NULL 值及其用途 2020 年 3 月 3 日,由 Robert Gravelle 撰寫

在資料庫中,NULL 值是一個具有非常特殊含義的值。因而,理解 NULL 值不同於零值或包含空格的欄位是非常重要的。在今天的文章中,我們將探討 NULL 值的含義,以及如何在 Navicat Premium中使用NULL。

什麼是 NULL?

應該注意的是,NULL 值並非資料庫獨有。在大多數電腦程式設計語言中也可以找到它,它演變成數值為零的內建常數。實際上,它是字元 0,仍然被用來終止 C 語言中的字串。但是,隨著時間的流逝,它的意思是「什麼也沒有」。具體來說,NULL 是指向代表 NULL 的特殊位元模式的指標。這通常被稱為「null 指標」。

在資料庫中,零是一個有意義的數值,而 NULL 是一個特殊的標記,表示不存在任何數值。從這種意義上講,NULL 並不像在程式設計語言中那樣指向儲存位置。在資料庫中,NULL 值表示缺少數值,這與零值不同。為了說明,請考慮此問題:「Rob 擁有多少張 CD?」答案可能是「零」(0)或者是 NULL。在第二個答案中,NULL 值可能意味著我們不知道 Rob 擁有多少張 CD。稍後,一旦我們確定了 Rob 擁有的 CD 數量,就可以使用數字更新 NULL 值。

允許將 NULL 作為欄值

屬於 KEY(主索引鍵)的任何欄都不允許使用 NULL,但是對於其他欄位,則完全由你決定。在建立資料表時,在欄定義旁邊包含 NOT NULL 子句將強制使用者在 INSERT 和 UPDATE 作業中為該欄指定一個數值。否則,將會引發錯誤,並且令作業失敗。 Navicat Premium的「資料表設計」畫面有「不是 null」欄,用於將欄位指定為可為 null 或不可為 null。

Not_Null_column (64K)

對於新欄位,不是 null 核取方塊已自動取消選取。

在查詢中參考 NULL 值

撰寫查詢時,有時你會希望篩選出具有 NULL 值的列。而其他時候,你可能特別想擷取包含 NULL 的列。這是兩種情況的處理方法:

查詢可以使用 IS NOT NULL 子句篩選掉 null。這是一個例子,從 Sakila 資料庫中排除包含 original_language_id 是 NULL 的影片:

Not_Null_query (75K)

同樣,你可以從 NOT NULL 子句中刪除 NOT 字來找出哪些列包含 NULL 值。現在,查詢僅傳回那些 original_language_id 是 NULL 的列:

null_query (100K)

總結

在今天的文章中,我們探討了 NULL 值的含義以及如何在關聯式資料庫中使用此特殊值。

有興趣了解有關 Navicat Premium 的更多資訊嗎?你可以下載並免費試用 14 天!

Navicat 文章
頻道記錄
分享
部落格封存檔