SQL FOREIGN KEY 約束
SQL FOREIGN KEY
約束用于防止破壞表之間關系的操作。FOREIGN KEY
是一張表中的字段(或字段集合),它引用另一張表中的主鍵。具有外鍵的表稱為子表,具有主鍵的表稱為被引用表或父表。
以下是兩個表的例子:
Persons 表
PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20
Orders 表
OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1
注意,“Orders” 表中的 “PersonID” 列指向 “Persons” 表中的 “PersonID” 列。“Persons” 表中的 “PersonID” 列是 “Persons” 表中的主鍵。“Orders” 表中的 “PersonID” 列是 “Orders” 表中的外鍵。
FOREIGN KEY
約束防止將無效數據插入到外鍵列中,因為它必須是父表中包含的值之一。
在 CREATE TABLE 時使用 SQL FOREIGN KEY
以下 SQL 在創建 “Orders” 表時在 “PersonID” 列上創建了一個 FOREIGN KEY
:
對于 MySQL:
CREATE TABLE Orders (OrderID int NOT NULL,OrderNumber int NOT NULL,PersonID int,PRIMARY KEY (OrderID),FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
對于 SQL Server / Oracle / MS Access:
CREATE TABLE Orders (OrderID int NOT NULL PRIMARY KEY,OrderNumber int NOT NULL,PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
要允許對 FOREIGN KEY
約束進行命名,并在多列上定義 FOREIGN KEY
約束,請使用以下 SQL 語法:
對于 MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders (OrderID int NOT NULL,OrderNumber int NOT NULL,PersonID int,PRIMARY KEY (OrderID),CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)REFERENCES Persons(PersonID)
);
在 ALTER TABLE 時使用 SQL FOREIGN KEY
要在表已經創建的情況下在 “PersonID” 列上創建 FOREIGN KEY
約束,請使用以下 SQL:
對于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
要允許對 FOREIGN KEY
約束進行命名,并在多列上定義 FOREIGN KEY
約束,請使用以下 SQL 語法:
對于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
刪除 FOREIGN KEY 約束
要刪除 FOREIGN KEY
約束,請使用以下 SQL:
對于 MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
對于 SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
通過這些 SQL 語句,您可以在數據庫中定義和管理 FOREIGN KEY
約束,以確保表之間的關系得到維護。
SQL CHECK 約束
SQL CHECK
約束用于限制可以放入列中的值范圍。如果在列上定義了 CHECK
約束,它將僅允許為該列指定某些值。如果在表上定義了 CHECK
約束,它可以基于行中其他列的值來限制某些列中的值。
在 CREATE TABLE 時使用 SQL CHECK
以下 SQL 在創建 “Persons” 表時在 “Age” 列上創建了一個 CHECK
約束。CHECK
約束確保一個人的年齡必須是 18 歲或以上:
對于 MySQL:
CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,CHECK (Age>=18)
);
對于 SQL Server / Oracle / MS Access:
CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int CHECK (Age>=18)
);
要允許對 CHECK
約束進行命名,并在多列上定義 CHECK
約束,請使用以下 SQL 語法:
對于 MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,City varchar(255),CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
在 ALTER TABLE 時使用 SQL CHECK
要在表已經創建的情況下在 “Age” 列上創建 CHECK
約束,請使用以下 SQL:
對于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Age>=18);
要允許對 CHECK
約束進行命名,并在多列上定義 CHECK
約束,請使用以下 SQL 語法:
對于 MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
刪除 CHECK 約束
要刪除 CHECK
約束,請使用以下 SQL:
對于 SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
對于 MySQL:
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
通過這些 SQL 語句,您可以在數據庫中定義和管理 CHECK
約束,以確保列中的值滿足指定的條件。
SQL DEFAULT 約束
SQL DEFAULT
約束用于為列設置默認值。如果沒有指定其他值,將在所有新記錄中添加默認值。
在 CREATE TABLE 時使用 SQL DEFAULT
以下 SQL 在創建 “Persons” 表時為 “City” 列設置了 DEFAULT
值:
對于 MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (ID int NOT NULL,LastName varchar(255) NOT NULL,FirstName varchar(255),Age int,City varchar(255) DEFAULT 'Sandnes'
);
DEFAULT
約束還可以用于通過使用諸如 GETDATE()
之類的函數插入系統值:
CREATE TABLE Orders (ID int NOT NULL,OrderNumber int NOT NULL,OrderDate date DEFAULT GETDATE()
);
在 ALTER TABLE 時使用 SQL DEFAULT
要在表已經創建的情況下在 “City” 列上創建 DEFAULT
約束,請使用以下 SQL:
對于 MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
對于 SQL Server:
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
對于 MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';
對于 Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
刪除 DEFAULT 約束
要刪除 DEFAULT
約束,請使用以下 SQL:
對于 MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;
對于 SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
對于 SQL Server:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
通過這些 SQL 語句,您可以在數據庫中為列設置默認值,確保在插入新記錄時,如果未提供值,將使用指定的默認值。
最后
為了方便其他設備和平臺的小伙伴觀看往期文章:
微信公眾號搜索:Let us Coding
,關注后即可獲取最新文章推送
看完如果覺得有幫助,歡迎 點贊、收藏、關注