SQL Server 支持级联删除

介绍

在关系型数据库中,级联删除(Cascading delete)是指当删除主表中的某个记录时,自动删除与之相关联的外键表中的记录。SQL Server 是一个常用的关系型数据库管理系统,它提供了对级联删除的支持。

级联删除的作用

级联删除的作用是保持数据的一致性和完整性。当两个表之间存在外键关系时,如果删除主表中的记录而不对外键表中的记录进行处理,就可能导致数据不一致性,即外键表中的记录无法找到对应的主表记录。为了避免这种情况的发生,可以使用级联删除来自动删除相关的外键表记录。

SQL Server 中的级联删除示例

假设我们有两个表,一个是学生表(Students),另一个是成绩表(Scores),它们之间的关系是一对多,即一个学生可以有多个成绩。

创建表

首先,我们需要创建这两个表。

CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    StudentName VARCHAR(50)
);

CREATE TABLE Scores (
    ScoreID INT PRIMARY KEY,
    StudentID INT,
    Score INT,
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID) ON DELETE CASCADE
);

在创建 Scores 表时,我们通过 FOREIGN KEY 和 REFERENCES 关键字定义了一个外键关系,并指定了 ON DELETE CASCADE,表示在删除主表中的记录时,自动删除外键表中与之相关联的记录。

插入数据

接下来,我们向这两个表中插入一些数据。

INSERT INTO Students (StudentID, StudentName)
VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');

INSERT INTO Scores (ScoreID, StudentID, Score)
VALUES (1, 1, 90), (2, 1, 95), (3, 2, 85), (4, 3, 92);

这样,我们就创建了三个学生的记录以及对应的成绩记录。

删除记录

现在,假设我们要删除学生表中 ID 为 2 的学生记录。由于我们在创建外键关系时指定了 ON DELETE CASCADE,所以这个删除操作会自动删除成绩表中与之相关联的记录。

DELETE FROM Students WHERE StudentID = 2;

执行这条删除语句后,我们可以验证成绩表中与该学生相关联的记录是否被删除。

SELECT * FROM Scores;

结果应该只剩下三条记录,即 ID 为 1 和 3 的学生的成绩记录。

总结

通过上面的示例,我们可以看到 SQL Server 的级联删除功能是如何工作的。在创建外键关系时,通过指定 ON DELETE CASCADE,可以实现级联删除的功能。这样,当删除主表中的记录时,相关联的外键表中的记录也会被自动删除,从而保持数据的一致性和完整性。

参考资料

  • [Microsoft Docs: CASCADE](
  • [SQL Server Tutorial: Foreign Key](