
- 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 - 插入查詢
- SQL - 選擇查詢
- SQL - Select Into
- SQL - Insert Into Select
- SQL - 更新查詢
- SQL - 刪除查詢
- 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 - BOOLEAN (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 - 空函式
- SQL - 檢查約束
- SQL - 預設約束
- 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 - 約束
SQL 約束
SQL 約束是應用於資料列或整個表以限制可以進入表的的資料型別的規則。當您嘗試對錶執行任何 INSERT、UPDATE 或 DELETE 操作時,RDBMS 將檢查該資料是否違反任何現有約束,如果定義的約束和資料操作之間存在任何違反,則它將中止操作並返回錯誤。
我們可以定義列級或表級約束。列級約束僅應用於一列,而表級約束應用於整個表。
SQL 建立約束
我們可以在建立表時使用 CREATE TABLE 語句在表上建立約束,或者在建立表後,我們可以使用 ALTER TABLE 語句建立或刪除表約束。
CREATE TABLE table_name ( column1 datatype constraint, column2 datatype constraint, .... columnN datatype constraint );
不同的 RDBMS 允許定義不同的約束。本教程將討論 MySQL 中可用的 7 個最重要的約束。
NOT NULL 約束
當應用於列時,NOT NULL 約束確保列不能具有 NULL 值。以下是建立 NOT NULL 約束的示例
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2) );
檢視有關 NOT NULL 約束 的更多詳細資訊
UNIQUE 鍵約束
當應用於列時,UNIQUE Key 約束確保列僅接受唯一值。以下是為 ID 列建立 UNIQUE Key 約束的示例。建立此約束後,ID 列不能為 null,並且它將僅接受唯一值。
CREATE TABLE CUSTOMERS ( ID INT NOT NULL UNIQUE, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2) );
檢視有關 唯一鍵約束 的更多詳細資訊
DEFAULT 值約束
當應用於列時,DEFAULT 值約束在未指定值時為列提供預設值。以下是為 NAME 列建立 DEFAULT 約束的示例。建立此約束後,如果 NAME 未設定值,則 NAME 列將設定為“不可用”值。
CREATE TABLE CUSTOMERS ( ID INT NOT NULL UNIQUE, NAME VARCHAR (20) DEFAULT 'Not Available', AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2) );
檢視有關 DEFAULT 值約束 的更多詳細資訊
PRIMARY 鍵約束
當應用於列時,PRIMARY Key 約束確保列僅接受唯一值,並且表上只能有一個 PRIMARY Key,但多個列可以構成一個 PRIMARY Key。以下是為 ID 列建立 PRIMARY Key 約束的示例。建立此約束後,ID 列不能為 null,並且它將僅接受唯一值。
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
檢視有關 PRIMARY Key 約束 的更多詳細資訊
FOREIGN 鍵約束
FOREIGN Key 約束對映到另一個表中的列,並唯一標識該表中的行/記錄。以下是在 CUSTOMERS 表中建立外部索引鍵約束的示例,如下面的語句所示 -
CREATE TABLE ORDERS ( ID INT NOT NULL, DATE DATETIME, CUSTOMER_ID INT FOREIGN KEY REFERENCES CUSTOMERS(ID), AMOUNT DECIMAL, PRIMARY KEY (ID) );
檢視有關 FOREIGN Key 約束 的更多詳細資訊
CHECK 值約束
當應用於列時,CHECK 值約束就像一個驗證,它用於檢查輸入到表特定列的資料的有效性。表並唯一標識該表中的行/記錄。以下是在 AGE 列上建立 CHECK 驗證的示例,如果其值低於 18,則不會被接受。
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL CHECK(AGE>=18), ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
檢視有關 CHECK 值約束 的更多詳細資訊
INDEX 約束
建立 INDEX 約束是為了加快從資料庫中檢索資料。可以使用表中的一列或一組列建立索引。表可以有一個 PRIMARY Key,但可以有多個 INDEXES。根據需要,索引可以是唯一的或非唯一的。以下是為 CUSTOMERS 表的 Age 列建立索引的示例。
CREATE INDEX idx_age ON CUSTOMERS ( AGE );
檢視有關 INDEX 約束 的更多詳細資訊
刪除 SQL 約束
可以使用帶有 DROP CONSTRAINT 選項的 ALTER TABLE 命令刪除您定義的任何約束。例如,要從 CUSTOMERS 表中刪除主鍵約束,可以使用以下命令。
ALTER TABLE CUSTOMERS DROP CONSTRAINT PRIMARY KEY;
某些 RDBMS 允許您停用約束而不是永久地從資料庫中刪除它們,您可能希望臨時停用約束,然後稍後重新啟用它們。
資料完整性約束
資料完整性約束用於確保資料的整體準確性、完整性和一致性。如今,資料完整性還指資料在監管合規性(例如 GDPR 合規性等)方面的安全性。
關係資料庫透過參照完整性的概念來處理資料完整性。有許多型別的完整性約束在參照完整性 (RI) 中發揮作用。這些約束包括主鍵、外部索引鍵、唯一約束和其他上面提到的約束。