SQL?FOREIGN?KEY約束保障表之間關(guān)系完整性關(guān)鍵規(guī)則詳解
SQL FOREIGN KEY 約束
SQL FOREIGN KEY 約束用于防止破壞表之間關(guān)系的操作。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 約束防止將無效數(shù)據(jù)插入到外鍵列中,因為它必須是父表中包含的值之一。
在 CREATE TABLE 時使用 SQL FOREIGN KEY
以下 SQL 在創(chuàng)建 "Orders" 表時在 "PersonID" 列上創(chuàng)建了一個 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
要在表已經(jīng)創(chuàng)建的情況下在 "PersonID" 列上創(chuàng)建 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 語句,您可以在數(shù)據(jù)庫中定義和管理 FOREIGN KEY 約束,以確保表之間的關(guān)系得到維護。
SQL CHECK 約束
SQL CHECK 約束用于限制可以放入列中的值范圍。如果在列上定義了 CHECK 約束,它將僅允許為該列指定某些值。如果在表上定義了 CHECK 約束,它可以基于行中其他列的值來限制某些列中的值。
在 CREATE TABLE 時使用 SQL CHECK
以下 SQL 在創(chuàng)建 "Persons" 表時在 "Age" 列上創(chuàng)建了一個 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
要在表已經(jīng)創(chuàng)建的情況下在 "Age" 列上創(chuàng)建 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 語句,您可以在數(shù)據(jù)庫中定義和管理 CHECK 約束,以確保列中的值滿足指定的條件。
SQL DEFAULT 約束
SQL DEFAULT 約束用于為列設(shè)置默認值。如果沒有指定其他值,將在所有新記錄中添加默認值。
在 CREATE TABLE 時使用 SQL DEFAULT
以下 SQL 在創(chuàng)建 "Persons" 表時為 "City" 列設(shè)置了 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() 之類的函數(shù)插入系統(tǒng)值:
CREATE TABLE Orders (
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);在 ALTER TABLE 時使用 SQL DEFAULT
要在表已經(jīng)創(chuàng)建的情況下在 "City" 列上創(chuàng)建 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 語句,您可以在數(shù)據(jù)庫中為列設(shè)置默認值,確保在插入新記錄時,如果未提供值,將使用指定的默認值。
以上就是SQL FOREIGN KEY約束保障表之間關(guān)系完整性關(guān)鍵規(guī)則詳解的詳細內(nèi)容,更多關(guān)于SQL FOREIGN KEY約束表完整性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL 8.0.18使用clone plugin重建MGR的實現(xiàn)
這篇文章主要介紹了MySQL 8.0.18使用clone plugin重建MGR的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12
MySQL 撤銷日志與重做日志(Undo Log與Redo Log)相關(guān)總結(jié)
這篇文章主要介紹了MySQL 撤銷日志與重做日志(Undo Log與Redo Log)相關(guān)總結(jié),幫助大家更好的理解和學習使用MySQL,感興趣的朋友可以了解下2021-03-03
MySQL事務(wù)的四大特性以及并發(fā)事務(wù)問題解讀
這篇文章主要介紹了MySQL事務(wù)的四大特性以及并發(fā)事務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
Ubuntu中遠程連接Mysql數(shù)據(jù)庫的詳細圖文教程
Ubuntu是一個以桌面應(yīng)用為主的Linux發(fā)行版操作系統(tǒng),這篇文章主要為大家詳細介紹了Ubuntu中遠程連接Mysql數(shù)據(jù)庫的詳細圖文教程,有需要的小伙伴可以參考下2025-04-04

