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

📅  最后修改于: 2022-05-13 01:55:21.713000             🧑  作者: 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 步:在 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
);

输出:

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

询问:

EXEC SP_COLUMNS STUDENT_MARKS;

输出:

第 7 步:在 STUDENT_NFO 表中插入 5 行。

询问:

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

输出:

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

询问:

SELECT * FROM STUDENT_INFO;

输出:

第 9 步:在 STUDENT_MARKS 表中插入 1 行。 ROLL_NO 列的条目(即 1)已经存在于基表中,即 STUDENT_INFO。

询问:

INSERT INTO STUDENT_MARKS VALUES(1,'CPP',100);

注意:插入是成功的,因为没有违反插入/添加异常,因为卷号 1 已经存在于基表 STUDENT_INFO 中。

输出:

第 10 步:在 STUDENT_MARKS 表中插入 1 行。 ROLL_NO 列的条目(即 4)在基表(即 STUDENT_INFO)中不存在。

询问:

INSERT INTO STUDENT_MARKS VALUES(4,'DBMS',95);

注意:插入不成功并引发引用完整性错误,因为违反了插入/添加异常,因为基表 STUDENT_INFO 中不存在卷号 4。

输出:

第 11 步:在 STUDENT_INFO 表中插入 1 行 ROLL_NO 值为 4。

询问:

INSERT INTO STUDENT_INFO VALUES(4,'KAREN','ME');

输出:

第 12 步:在 STUDENT_MARKS 表中插入 1 行。现在,此处的 ROLL_NO 列条目(即 4)存在于基表中,即 STUDENT_INFO。

询问:

INSERT INTO STUDENT_MARKS VALUES(4,'DBMS',95);

注意:插入成功,因为没有违反插入/添加异常,因为卷号 4 现在存在于基表 STUDENT_INFO 中。

输出:

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

询问:

SELECT * FROM STUDENT_MARKS;

输出