了解使用NULL來避免數據庫問題
新的數據庫世界的用戶常常被特定的字段值 - NULL值所困惑。 該值可以在包含任何類型數據的字段中找到,並且在關係數據庫的上下文中具有非常特殊的含義。 最好用幾個關於NULL 不是什麼的話來開始我們對NULL的討論:
- NULL不是數字零。
- NULL不是空字符串(“”)的值。
相反,NULL是用來表示未知數據的值。 通常,數據庫程序員會使用短語“一個NULL值”,但這是不正確的。 請記住:NULL是未知的值,其中該字段顯示為空白。
真實世界中的NULL
我們來看一個簡單的例子:一個包含水果攤的庫存的表。 假設我們的庫存包含10個蘋果和3個桔子。 我們也儲存李子,但我們的庫存信息不完整,我們不知道有多少(如果有)李子庫存。 使用NULL值,我們可以在下表中顯示庫存表。
水果攤位清單
InventoryID | 項目 | 數量 |
1 | 蘋果 | 10 |
2 | 桔子 | 3 |
3 | 李子 | 空值 |
將李子記錄的數量設為0顯然是不正確的,因為這意味著我們在庫存中沒有李子。 相反,我們可能會有一些李子,但我們不確定。
為NULL或NOT NULL?
表可以設計為允許或不允許NULL值。
以下是創建允許一些NULL的Inventory表的SQL示例:
SQL> CREATE TABLE INVENTORY(InventoryID INT NOT NULL,Item VARCHAR(20)NOT NULL,Quantity INT);此處的Inventory表不允許InventoryID和Item列的NULL值,但確實允許它們用於Quantity列。
雖然允許NULL值非常好,但NULL值可能會導致問題,因為任何一個值為NULL的值的比較總是會導致NULL。
要檢查您的表是否包含NULL值,請使用IS NULL或IS NOT NULL運算符。 這是一個IS NULL的例子:
SQL> SELECT INVENTORYID,ITEM,QUANTITY FROM INVENTORY WHER QUANTITY NOT NOT NULL;以我們的例子為例,這將返回:
InventoryID | 項目 | 數量 |
---|---|---|
3 | 李子 |
在NULL上運行
使用NULL值通常會生成NULL結果,具體取決於SQL操作 。 例如,假設A是NULL:
算術運算符
- A + B = NULL
- A - B = NULL
- A * B = NULL
- A / B = NULL
比較運算符
- A = B = NULL
- A!= B = NULL
- A> B = NULL
- A!
這些只是運算符的一些示例,如果一個操作數為NULL,它將始終返回NULL。 存在更複雜的查詢,並且所有查詢都由NULL值複雜化。 回家的要點是,如果你在數據庫中允許NULL值,理解它們的含義和計劃。
簡而言之,這是NULL !