主鍵和外鍵約束:主鍵約束用于唯一標識數據庫表中的每一行數據。一個表只能有一個主鍵,且主鍵值不能為NULL。
示例:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(50)
);
外鍵約束用于確保表與其他表之間的關系的完整性。外鍵是一個表中的列,其值必須與另一個表中的主鍵或唯一鍵相匹配。
示例:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATE,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
唯一性約束:唯一性約束用于確保數據庫表中的某個列的值是唯一的。
示例:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(50),
Email VARCHAR(50) UNIQUE
);
默認值和非空約束:默認值約束用于為表中的某個列指定一個默認值。
示例:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
StudentName VARCHAR(50),
Grade CHAR(1) DEFAULT 'A'
);
非空約束用于確保某個列不接受NULL值。
示例:
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(50) NOT NULL,
Price DECIMAL(10, 2)
);
CHECK約束:CHECK約束用于定義在插入或更新數據時必須滿足的條件。
示例:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
OrderDate DATE,
TotalAmount DECIMAL(10, 2),
CHECK (TotalAmount > 0)
);
數據類型約束:數據類型約束用于確保列中的數據與所定義的數據類型相匹配。
示例:
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
StudentName VARCHAR(50),
Age INT CHECK (Age >= 0)
);
檢查約束:檢查約束允許在列級別定義一個條件,確保插入或更新的數據滿足指定的條件。可以使用布爾表達式、比較運算符和函數來定義檢查約束。
示例:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(50),
Salary DECIMAL(10, 2),
CONSTRAINT CHK_Salary CHECK (Salary > 0)
);
級聯約束:級聯約束是外鍵約束的一種擴展,用于在主表的行被刪除或更新時自動處理相關的從表行。可以指定級聯刪除或級聯更新操作來維護數據一致性。
示例:
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(50)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
OrderDate DATE,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE
);
來自約束:來自約束("FROM" constraints)是一種基于表達式的約束,它可以通過一個查詢來定義約束條件。它允許將查詢結果用作約束條件。
示例:
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(50),
DepartmentID INT,
Salary DECIMAL(10, 2),
CONSTRAINT CHK_Salary CHECK (Salary > (SELECT AVG(Salary) FROM Employees))
);
域約束:域約束用于定義特定列的有效值范圍,它使用預定義的域(domain)來限制數據輸入。
示例:
CREATE DOMAIN AgeDomain AS INT
CHECK (VALUE >= 0 AND VALUE <= 120);
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
StudentName VARCHAR(50),
Age AgeDomain
);
這些約束類型的使用可以提供強大的數據驗證和完整性保護機制。它們確保數據庫中存儲的數據符合預期的結構和規則,并防止無效或不一致的數據被插入。通過合理應用這些約束,可以提高數據庫的可靠性、性能和安全性。