📜  SQL Server外键(1)

📅  最后修改于: 2023-12-03 15:05:17.947000             🧑  作者: Mango

SQL Server 外键

在关系数据库中,外键是一种用于建立在两个表之间关联关系的约束。SQL Server 外键提供了数据完整性和一致性保护,以确保数据一致性并防止数据丢失。

什么是外键?

简而言之,外键就是一个列或列集合,它引用了另一个表中的主键或唯一键。外键使得两个表之间的行可以互相关联。外键还可以用于确保数据的完整性和一致性,从而防止非法操作。所有的主流关系数据库系统都支持外键,SQL Server 也不例外。

创建外键

在 SQL Server 中,创建外键的语法如下:

ALTER TABLE 表名
ADD CONSTRAINT 外键名 FOREIGN KEY (列名)
REFERENCES 另一个表名(另一个表中的列名);

举个例子,我们有一个 Students 表,其中有一个名为 ClassId 的列,表示学生所属班级的编号。我们可以在 Students 表中创建一个外键,引用另一个表 Class。

CREATE TABLE Class (
   ClassId INT PRIMARY KEY,
   ClassName VARCHAR(50)
);

CREATE TABLE Students (
   StudentId INT PRIMARY KEY,
   Name VARCHAR(50),
   ClassId INT,
   CONSTRAINT FK_Students_Class FOREIGN KEY (ClassId)
   REFERENCES Class(ClassId)
);

以上代码中,我们在 Students 表中创建了一个外键FK_Students_Class,并引用了 Class 表中的 ClassId 列。

外键的类型
CASCADE

当你从一个表中删除或更新数据时,CASCADE 约束指示 SQL Server 同时删除或更新引用该行的任何外键列。例如,假如你要删除一个班级,那么应该同时删除这个班级中的所有学生。在这种情况下,我们应该用 CASCADE 外键。

CREATE TABLE Class (
   ClassId INT PRIMARY KEY,
   ClassName VARCHAR(50)
);

CREATE TABLE Students (
   StudentId INT PRIMARY KEY,
   Name VARCHAR(50),
   ClassId INT,
   CONSTRAINT FK_Students_Class FOREIGN KEY (ClassId)
   REFERENCES Class(ClassId) ON DELETE CASCADE
);

以上代码中,我们在 Students 表中创建了一个外键 FK_Students_Class,引用了 Class 表中的 ClassId 列,并设置了 ON DELETE CASCADE。

SET NULL

当你从一个表中删除或更新数据时,SET NULL 约束指示 SQL Server 将引用该行的任何外键列设置为 NULL。例如,假如你要删除一个班级,那么应该将该班级中的学生设置为 NULL。在这种情况下,我们应该用 SET NULL 外键。

CREATE TABLE Class (
   ClassId INT PRIMARY KEY,
   ClassName VARCHAR(50)
);

CREATE TABLE Students (
   StudentId INT PRIMARY KEY,
   Name VARCHAR(50),
   ClassId INT,
   CONSTRAINT FK_Students_Class FOREIGN KEY (ClassId)
   REFERENCES Class(ClassId) ON DELETE SET NULL
);

以上代码中,我们在 Students 表中创建了一个外键 FK_Students_Class,引用了 Class 表中的 ClassId 列,并设置了 ON DELETE SET NULL。

NO ACTION

当你从一个表中删除或更新数据时,NO ACTION 约束指示 SQL Server 不执行任何动作。这是默认的行为。在这种情况下,我们不应该使用 ON DELETE 或者 ON UPDATE,因为这样会导致系统忽略改变。

CREATE TABLE Class (
   ClassId INT PRIMARY KEY,
   ClassName VARCHAR(50)
);

CREATE TABLE Students (
   StudentId INT PRIMARY KEY,
   Name VARCHAR(50),
   ClassId INT,
   CONSTRAINT FK_Students_Class FOREIGN KEY (ClassId)
   REFERENCES Class(ClassId) ON DELETE NO ACTION
);

以上代码中,我们在 Students 表中创建了一个外键 FK_Students_Class,引用了 Class 表中的 ClassId 列,并设置了 ON DELETE NO ACTION。

总结

SQL Server 外键是一种非常有用的约束,可以用于确保数据的完整性和一致性。在创建外键时,我们应该选择合适的约束类型(CASCADE、SET NULL 或 NO ACTION),以便实现最佳的数据管理。