
- SQL 教程
- SQL - 首頁
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 資料庫
- SQL - 語法
- SQL - 資料型別
- SQL - 運算子
- SQL - 表示式
- SQL 資料庫
- SQL - 建立資料庫
- SQL - 刪除資料庫
- SQL - 選擇資料庫
- SQL - 重新命名資料庫
- SQL - 顯示資料庫
- SQL - 資料庫備份
- SQL 表
- SQL - 建立表
- SQL - 顯示錶
- SQL - 重命名錶
- SQL - 截斷表
- SQL - 克隆表
- SQL - 臨時表
- SQL - 修改表
- SQL - 刪除表
- SQL - 刪除表
- SQL - 約束
- SQL 查詢
- SQL - INSERT 查詢
- SQL - SELECT 查詢
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查詢
- SQL - DELETE 查詢
- SQL - 排序結果
- SQL 檢視
- SQL - 建立檢視
- SQL - 更新檢視
- SQL - 刪除檢視
- SQL - 重新命名檢視
- SQL 運算子和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布林 (BIT) 運算子
- SQL - LIKE 運算子
- SQL - IN 運算子
- SQL - ANY, ALL 運算子
- SQL - EXISTS 運算子
- SQL - CASE
- SQL - NOT 運算子
- SQL - 不等於
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 運算子
- SQL - UNION 運算子
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 運算子
- SQL - EXCEPT 運算子
- SQL - 別名
- SQL 連線
- SQL - 使用連線
- SQL - 內連線
- SQL - 左連線
- SQL - 右連線
- SQL - 交叉連線
- SQL - 全連線
- SQL - 自連線
- SQL - 刪除連線
- SQL - 更新連線
- SQL - 左連線 vs 右連線
- SQL - UNION vs JOIN
- SQL 金鑰
- SQL - 唯一鍵
- SQL - 主鍵
- SQL - 外部索引鍵
- SQL - 組合鍵
- SQL - 備選鍵
- SQL 索引
- SQL - 索引
- SQL - 建立索引
- SQL - 刪除索引
- SQL - 顯示索引
- SQL - 唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高階 SQL
- SQL - 萬用字元
- SQL - 註釋
- SQL - 注入
- SQL - 託管
- SQL - MIN & MAX
- SQL - NULL 函式
- SQL - CHECK 約束
- SQL - DEFAULT 約束
- SQL - 儲存過程
- SQL - NULL 值
- SQL - 事務
- SQL - 子查詢
- SQL - 處理重複項
- SQL - 使用序列
- SQL - 自動遞增
- SQL - 日期和時間
- SQL - 遊標
- SQL - 公共表表達式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 資料庫調優
- SQL 函式參考
- SQL - 日期函式
- SQL - 字串函式
- SQL - 聚合函式
- SQL - 數值函式
- SQL - 文字和影像函式
- SQL - 統計函式
- SQL - 邏輯函式
- SQL - 遊標函式
- SQL - JSON 函式
- SQL - 轉換函式
- SQL - 資料型別函式
- SQL 有用資源
- SQL - 問答
- SQL - 快速指南
- SQL - 有用函式
- SQL - 有用資源
- SQL - 討論
SQL - NOT NULL 約束
在表中,列通常預設可以接受 NULL 值。但是,如果您想確保特定列不包含 NULL 值,則需要在該列上新增 NOT NULL 約束/條件。
SQL NOT NULL 約束
SQL 中的NOT NULL 約束用於確保表中的列不包含 NULL(空)值,並防止任何嘗試插入或更新包含 NULL 值的行。
通常,如果我們在將資料插入表時不向特定列提供值,則預設情況下它被視為 NULL 值。但是,如果我們在列上新增 NOT NULL 約束,它將強制在資料插入期間必須為此列提供值,並且嘗試插入 NULL 值將導致約束違規錯誤。
語法
以下是建立表時NOT NULL 約束的基本語法:
CREATE TABLE table_name ( column1 datatype NOT NULL, column2 datatype, column3 datatype NOT NULL, ... );
在表上建立 NOT NULL 約束
要在表的列上新增 NOT NULL 約束,我們只需要在列定義中在列的資料型別之後新增關鍵字“NOT NULL”。
示例
首先,讓我們使用以下查詢建立一個名為CUSTOMERS的表:
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (20, 2), PRIMARY KEY (ID) );
讓我們使用以下 INSERT 查詢將一些值插入到上面建立的表中:
INSERT INTO CUSTOMERS VALUES (1, 'Ramesh', '32', 'Ahmedabad', 2000), (2, 'Khilan', '25', 'Delhi', 1500), (3, 'Kaushik', '23', 'Kota', 2500), (4, 'Chaitali', '25', 'Mumbai', 6500), (5, 'Hardik','27', 'Bhopal', 8500), (6, 'Komal', '22', 'Hyderabad', 9000), (7, 'Muffy', '24', 'Indore', 5500);
表將如下所示建立:
ID | 姓名 | 年齡 | 地址 | 薪資 |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
驗證
要在 MySQL 資料庫中顯示錶的結構,我們使用DESCRIBE命令。DESCRIBE 命令提供表列、資料型別和各種屬性的摘要,如下所示:
DESCRIBE CUSTOMERS;
正如我們在下面的輸出中看到的,該表顯示了有關表列名、其型別以及它們是否可為空的資訊。
欄位 | 型別 | 空 | 鍵 | 預設值 | 額外 |
---|---|---|---|---|---|
ID | int | 否 | PRI | NULL | |
姓名 | varchar(20) | 否 | NULL | ||
年齡 | int | 否 | NULL | ||
地址 | char(25) | 是 | NULL | ||
薪資 | decimal(20,2) | 是 | NULL |
從表中刪除 NOT NULL 約束
在 SQL 中,要刪除現有表中列的 NOT NULL 約束,我們需要使用ALTER TABLE語句。使用此語句,我們可以修改列的定義,即可以更改現有列的名稱、資料型別或約束。
刪除列上 NOT NULL 約束的一種方法是將其更改為 NULL。
語法
以下是從 MySQL 資料庫中的表中刪除非空約束的語法:
ALTER TABLE table_name MODIFY COLUMN column_name datatype NULL;
其中:
- table_name 是包含我們要修改的列的表的名稱。
- column_name 是具有要刪除的 NOT NULL 約束的列的名稱。
- datatype 是列的資料型別。
示例
以下是將 MySQL 資料庫中 CUSTOMERS 表的 NAME 列上的約束脩改為 NULL 的查詢:
ALTER TABLE CUSTOMERS MODIFY COLUMN NAME VARCHAR(20) NULL;
輸出
執行上述查詢後,輸出如下所示:
Query OK, 0 rows affected (0.10 sec) Records: 0 Duplicates: 0 Warnings: 0
驗證
現在,讓我們使用以下查詢顯示名為“CUSTOMERS”的表的結構:
DESCRIBE CUSTOMERS;
正如我們在下表中看到的,NAME 列被修改為可為空,這意味著此列允許 NULL 值。
欄位 | 型別 | 空 | 鍵 | 預設值 | 額外 |
---|---|---|---|---|---|
ID | int | 否 | PRI | NULL | |
姓名 | varchar(20) | 是 | NULL | ||
年齡 | int | 否 | NULL | ||
地址 | char(25) | 是 | NULL | ||
薪資 | decimal(20,2) | 是 | NULL |
向現有表新增 NOT NULL 約束
在上一節中,我們透過使用 ALTER TABLE 語句更改列的定義來刪除列上的 NOT NULL 約束。同樣,我們可以使用 ALTER TABLE 語句向現有表中的列新增 NOT NULL 約束。
語法
以下是向 MySQL 資料庫中現有列新增 NOT NULL 約束的 SQL 語法:
ALTER TABLE table_name MODIFY COLUMN column_name datatype NOT NULL;
示例
假設先前建立的表CUSTOMERS,讓我們修改ADDRESS列,確保它不允許空值,使用以下查詢:
ALTER TABLE CUSTOMERS MODIFY COLUMN ADDRESS CHAR(25) NOT NULL;
輸出
當我們執行上述查詢時,將獲得如下輸出:
Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0
驗證
我們可以使用以下查詢顯示 CUSTOMERS 表的結構:
DESCRIBE CUSTOMERS;
正如我們在下面的輸出中看到的,ADDRESS 列已修改,這意味著此列不允許 NULL 值。
欄位 | 型別 | 空 | 鍵 | 預設值 | 額外 |
---|---|---|---|---|---|
ID | int | 否 | PRI | NULL | |
姓名 | varchar(20) | 否 | NULL | ||
年齡 | int | 否 | NULL | ||
地址 | char(25) | 否 | NULL | ||
薪資 | decimal(20,2) | 是 | NULL |