
SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作。FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键。具有外键的表称为子表,具有主键的表称为被引用表或父表。
以下是两个表的例子:
Persons 表
PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20Orders 表
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 约束防止将无效数据插入到外键列中,因为它必须是父表中包含的值之一。
以下 SQL 在创建 "Orders" 表时在 "PersonID" 列上创建了一个 FOREIGN KEY:
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);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 语法:
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)
);要在表已经创建的情况下在 "PersonID" 列上创建 FOREIGN KEY 约束,请使用以下 SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);要允许对 FOREIGN KEY 约束进行命名,并在多列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);要删除 FOREIGN KEY 约束,请使用以下 SQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;通过这些 SQL 语句,您可以在数据库中定义和管理 FOREIGN KEY 约束,以确保表之间的关系得到维护。
SQL CHECK 约束用于限制可以放入列中的值范围。如果在列上定义了 CHECK 约束,它将仅允许为该列指定某些值。如果在表上定义了 CHECK 约束,它可以基于行中其他列的值来限制某些列中的值。
以下 SQL 在创建 "Persons" 表时在 "Age" 列上创建了一个 CHECK 约束。CHECK 约束确保一个人的年龄必须是 18 岁或以上:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);要允许对 CHECK 约束进行命名,并在多列上定义 CHECK 约束,请使用以下 SQL 语法:
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')
);要在表已经创建的情况下在 "Age" 列上创建 CHECK 约束,请使用以下 SQL:
ALTER TABLE Persons
ADD CHECK (Age>=18);要允许对 CHECK 约束进行命名,并在多列上定义 CHECK 约束,请使用以下 SQL 语法:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');要删除 CHECK 约束,请使用以下 SQL:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;ALTER TABLE Persons
DROP CHECK CHK_PersonAge;通过这些 SQL 语句,您可以在数据库中定义和管理 CHECK 约束,以确保列中的值满足指定的条件。
SQL DEFAULT 约束用于为列设置默认值。如果没有指定其他值,将在所有新记录中添加默认值。
以下 SQL 在创建 "Persons" 表时为 "City" 列设置了 DEFAULT 值:
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()
);要在表已经创建的情况下在 "City" 列上创建 DEFAULT 约束,请使用以下 SQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';要删除 DEFAULT 约束,请使用以下 SQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;通过这些 SQL 语句,您可以在数据库中为列设置默认值,确保在插入新记录时,如果未提供值,将使用指定的默认值。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。