什么是外键?
外键是在表中加入的一种指向另一张表中特定数据列的约束。它们是在两个表之间建立关系的主要机制之一。为了将数据存储在两个相关的表中,外键用于在两个表之间创建引用完整性约束,以确保所有的数据都是一致和完整的。通过使用外键,可以使数据存储在一个关系模型中,从而可以支持更加复杂的查询。
如何添加外键?
在MS SQL中添加外键是一件很简单的事情。通常情况下,你只需要执行简单的ALTER TABLE语句即可。
步骤一:创建两张相关联的表
为了说明如何在MS SQL中创建外键,我们需要首先创建两张相关联的表。在这个例子中,我们将创建两张名为"Customers"和"Orders"的表。
CREATE TABLE Customers(
CustomerID INT NOT NULL PRIMARY KEY,
CustomerName VARCHAR(150) NOT NULL,
ContactName VARCHAR(50),
Country VARCHAR(50)
)
以上代码用于创建名为"Customers"的表,该表包含了4个字段:CustomerID、CustomerName、ContactName以及Country。
CREATE TABLE Orders(
OrderID INT NOT NULL PRIMARY KEY,
OrderDate DATE NOT NULL,
CustomerID INT NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
)
以上代码用于创建名为"Orders"的表,该表包含了3个字段:OrderID、OrderDate以及CustomerID。注意到在CustomerID字段中添加了外键约束。
步骤二:使用ALTER TABLE添加外键约束
完成了以上步骤后,我们需要使用ALTER TABLE语句来添加外键约束。这个约束指向"Customers"表中的"CustomerID"字段,确保"Orders"表中的"CustomerID"字段中只包含符合要求的值。
ALTER TABLE Orders ADD FOREIGN KEY(CustomerID) REFERENCES Customers(CustomerID);
以上代码使用ALTER TABLE语句来添加一个FOREIGN KEY约束。该约束用于将"Orders"表中的"CustomerID"字段连接到"Customers"表中的"CustomerID"字段,从而创建一个外键关系。
步骤三:验证外键约束
验证外键约束是否有效,可以使用以下语句:
EXEC sp_helpconstraint 'Orders';
以上语句可以显示与"Orders"表关联的所有约束。
在MS SQL中,如果试图在"Orders"表中插入一个"CustomerID"值,而该值不存在于"Customers"表中,则会产生一个约束错误,如下所示:
INSERT INTO Orders(OrderID, OrderDate, CustomerID)
VALUES(1, '2022-01-01', 100);
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Orders__Custome__286302EC". The conflict occurred in database "Test", table "dbo.Customers", column 'CustomerID'.
在以上示例中,我们试图将一个值为100的"CustomerID"插入到"Orders"表中,但"Customers"表中并没有这个值。这里就会产生一个约束错误。
总结
MS SQL中添加外键,可以通过ALTER TABLE语句来完成。这里需要完成三个步骤:首先创建两张相关联的表,其次使用ALTER TABLE语句添加FOREIGN KEY约束,最后验证外键约束是否有效。