📜  用于演示表中参照完整性中的更新异常的 SQL 查询

📅  最后修改于: 2022-05-13 01:54:45.075000             🧑  作者: Mango

用于演示表中参照完整性中的更新异常的 SQL 查询

在 SQL 中,存在引用完整性的概念。这意味着外键可以引用另一个表的主键。这个概念基本上存在3个异常。在这里,我们讨论更新异常。这意味着如果目标表的外键列中存在条目,则无法在基表的主键列中更新该条目。如下图所示。对于本文,我们将使用 Microsoft SQL Server 作为我们的数据库。

第 1 步:创建数据库。为此,请使用以下命令创建一个名为 GeeksForGeeks 的数据库。

询问:

CREATE DATABASE GeeksForGeeks

输出:

第 2 步:使用 GeeksForGeeks 数据库。为此,请使用以下命令。

询问:

USE GeeksForGeeks

输出:

第 3 步:在 GeeksForGeeks 数据库中创建一个表 STUDENT_INFO。该表有 3 列,即 ROLL_NO、STUDENT_NAME 和 BRANCH,其中包含各个学生的卷号、姓名和分支。

询问:

CREATE TABLE STUDENT_INFO(
ROLL_NO INT PRIMARY KEY,
STUDENT_NAME VARCHAR(10),
BRANCH VARCHAR(5)
);

输出:

第 4 步:描述表 STUDENT_INFO 的结构。

询问:

EXEC SP_COLUMNS STUDENT_INFO;

输出:

第 5 步:在 STUDENT_INFO 表中插入 3 行。

询问:

INSERT INTO STUDENT_INFO VALUES(1,'JIM','CSE');
INSERT INTO STUDENT_INFO VALUES(2,'TIM','ELE');
INSERT INTO STUDENT_INFO VALUES(3,'PAM','ECE');

输出:

第 6 步:显示 STUDENT_INFO 表的所有行。

询问:

SELECT * FROM STUDENT_INFO;

输出:

第 7 步:在 GeeksForGeeks 数据库中创建一个表 STUDENT_MARKS。该表有 3 列,即 ROLL_NO、SUBJECT 和 MARKS,分别包含各个学生的卷号、科目和分数。这里 ROLL_NO 列作为外键引用 STUDENT_INFO 表的 ROLL_NO 列,这是 STUDENT_INFO 表的主键。

询问:

CREATE TABLE STUDENT_MARKS(
ROLL_NO INT REFERENCES STUDENT_INFO(ROLL_NO),
SUNJECT VARCHAR(10),
MARKS INT
);

输出:

第 8 步:描述表 STUDENT_MARKS 的结构。

询问:

EXEC SP_COLUMNS STUDENT_MARKS;

输出:

第 9 步:在 STUDENT_MARKS 表中插入 2 行。

询问:

INSERT INTO STUDENT_MARKS VALUES(1,'CPP',98);
INSERT INTO STUDENT_MARKS VALUES(2,'DBMS',89);

输出:

第 10 步:显示 STUDENT_MARKS 表的所有行。

询问:

SELECT * FROM STUDENT_MARKS;

输出:

步骤 11:更新 STUDENT_INFO 表中 ROLL_NO 为 3 的 1 行,并将 ROLL_NO 设置为 30。此处 ROLL_NO 列的条目即 3 在目标表即 STUDENT_MARKS 中不存在。

询问:

UPDATE STUDENT_INFO SET ROLL_NO=30 WHERE ROLL_NO=3;

注意:更新成功,因为没有违反更新异常,因为目标表 STUDENT_MARKS 中不存在卷号 3。

输出:

第 12 步:显示所有更新的 STUDENT_INFO 表。

询问:

SELECT * FROM STUDENT_INFO;

输出:

步骤 13:更新 STUDENT_INFO 表中 ROLL_NO 为 2 的 1 行并将 ROLL_NO 设置为 20。此处 ROLL_NO 列的条目即 2 存在于目标表即 STUDENT_MARKS 中。

询问:

UPDATE STUDENT_INFO SET ROLL_NO=20 WHERE ROLL_NO=2;

注意:更新不成功,并且由于目标表 STUDENT_MARKS 中存在卷号 2,因此违反了更新异常,因此引发了引用完整性错误。

输出: