SQL - NOT NULL 範例:新手指南

你好,未來的資料庫魔法師!今天,我們將要踏入令人興奮的 SQL 世界,並探索一個關鍵概念:NOT NULL 範例。別擔心你對編程還是新手;我會一步步引導你,就像我過去幾年來對無數學生所做的一樣。那麼,我們就挽起袖子開始吧!

SQL - NOT NULL

SQL NOT NULL 範例

NOT NULL 是什麼?

想像你正在填寫一張新的圖書館借書證申請表。有些欄位是可選的,比如你的中間名,但有些則是絕對必要的,例如你的名字和地址。在資料庫的世界裡,NOT NULL 範例扮演著類似角色。它確保一個列必須始終包含一個值;不能留空。

為什麼 NOT NULL 很重要?

想像一個學校的資料庫。一個學生記錄沒有名字或學號,這有道理嗎?可能沒有!NOT NULL 範例有助於維護數據的完整性,防止關鍵信息被省略。

在表中創建 NOT NULL 範例

讓我們從為我們想像中的圖書館創建一個簡單的表開始。我們將稱之為 "Books"。

CREATE TABLE Books (
BookID INT NOT NULL,
Title VARCHAR(100) NOT NULL,
Author VARCHAR(50) NOT NULL,
PublicationYear INT,
ISBN VARCHAR(13) NOT NULL
);

在這個例子中:

  • BookIDTitleAuthorISBN 被標記為 NOT NULL,因為我們認為這些字段是必要的。
  • PublicationYear 沒有 NOT NULL 範例,所以它是可選的。

現在,讓我們嘗試插入一些數據:

-- 這個會正常工作
INSERT INTO Books (BookID, Title, Author, PublicationYear, ISBN)
VALUES (1, 'To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789');

-- 這個也會正常工作(省略了可選的 PublicationYear)
INSERT INTO Books (BookID, Title, Author, ISBN)
VALUES (2, '1984', 'George Orwell', '9780451524935');

-- 這個會失敗,因為我們試圖省略 Author,它是 NOT NULL
INSERT INTO Books (BookID, Title, PublicationYear, ISBN)
VALUES (3, 'The Great Gatsby', 1925, '9780743273565');

最後一個 INSERT 語句會拋出錯誤,因為我們違反了 Author 列的 NOT NULL 範例。

從表中移除 NOT NULL 範例

有時候,我們可能會意識到,我們最初認為是必要的一個字段其實可以是可選的。讓我們假設我們決定 ISBN 不總是必要的(也許對於非常古老的書)。以下是如何移除 NOT NULL 範例的方法:

ALTER TABLE Books
MODIFY COLUMN ISBN VARCHAR(13);

現在,ISBN 可以是 NULL。但記住,更改現有表的範例應小心謹慎,尤其是在生產環境中!

為現有表添加 NOT NULL 範例

如果我們後來發現我們確實需要確保每本書都有出版年份怎麼辦?我們可以向現有的列添加 NOT NULL 範例:

-- 首先,我們需要確保列中沒有 NULL 值
UPDATE Books
SET PublicationYear = 0
WHERE PublicationYear IS NULL;

-- 現在我们可以添加 NOT NULL 範例
ALTER TABLE Books
MODIFY COLUMN PublicationYear INT NOT NULL;

這裡發生了什麼:

  1. 我們更新任何 NULL 值為 0(或其他適當的默認值)。
  2. 我們更改表以添加 NOT NULL 範例。

在添加範例之前處理現有的 NULL 值是至关重要的;否則,ALTER TABLE 語句將會失敗。

一句忠告

向現有表添加 NOT NULL 範例可能會有些棘手。在進行此類更改之前,總是備份你的數據!

使用 NOT NULL 的最佳實踐

實踐 描述
寶貴使用 只對真正必須有值的列應用 NOT NULL
考慮默認值 對於應該總是有值但可能未被提供的列,考慮使用默認值與 NOT NULL 一起使用
提前規劃 在設計階段試圖識別 NOT NULL 列,以避免後來更改表
文档化 在你的模式設計中清晰地記錄為什麼某些列是 NOT NULL

結論

好了,我的熱情學生們!我們已經穿越了 NOT NULL 範例的土地,從創建有 NOT NULL 列的表到為現有表添加和移除這些範例。記住,NOT NULL 就像一個嚴肅的圖書館管理員,確保我們數據庫中的 "書籍" 所有重要細節都被正確填寫。

在你繼續你的 SQL 冒險時,你會發現 NOT NULL 只是你數據庫工具包中的許多工具之一。它可能看起來很小,但請相信我,在維護數據完整性方面它非常有力。我見過無數數據庫災難因為恰當放置的 NOT NULL 範例而被避免!

繼續練習,保持好奇心,在你不知道之前,你將會在睡夢中寫 SQL 查詢(雖然我實際上不建議這樣——鍵盤是糟糕的枕頭)。

祝編程愉快,未來的數據大師們!

Credits: Image by storyset