创建grade表的外键约束,要求修改删除为set null
时间: 2024-05-21 14:13:17 浏览: 64
对于这个问题,您可以在创建外键约束时使用 ON DELETE SET NULL 和 ON UPDATE SET NULL 来设置删除和修改操作的行为。例如,如果您想要将 grade 表中的 student_id 列作为外键与 student 表中的 id 列关联,您可以使用以下 SQL 语句创建外键约束:
ALTER TABLE grade ADD CONSTRAINT fk_student FOREIGN KEY (student_id) REFERENCES student(id) ON DELETE SET NULL ON UPDATE SET NULL;
这将使在删除或更新 student 表中的行时,将与之关联的 grade 表中的 student_id 列设置为 NULL。
相关问题
创建grade表的外建约束,要求修改删除为set null
外键约束是用来保证数据的完整性,当我们在创建grade表的外键约束时,可以使用ON DELETE SET NULL语句来实现在删除主表数据时将外键设置为NULL,这样可以避免数据的不一致性。同时,在修改主表数据时,也可以使用ON UPDATE SET NULL语句来将外键值设置为NULL,保证数据的完整性。
(2)用insert语句为上述3个表插入若干正确的数据,为后面的测试所用。(插入后将最终的三个表的数据截图) (3)将student表上sage 从20到50的约束修改为sage从15到30。 (4)在SC表中,修改外键约束sc_fk_sno,实现在Student表中删除和修改时可以级联删除和修改SC表中的相关数据,并通过删除和修改操作体会此约束,截图说明级联删除的结果。 (5)在SC表中,修改外键约束sc_fk_cno,实现在Course表中修改cno时可以级联修改SC表中的相关数据,删除时的策略不变(仍为restrict),并通过修改和删除操作体会此约束,截图说明级联修改的结果。 (6)删除SC表上对于grade在大于等于0到小于等于100分之间的约束。 (7)在course表中,修改外键约束course_fk_cpno,实现在course表中删除某课程时,以此课程为先修课的cpno字段自动被设置为空;修改时的策略不变(仍为restrict)。通过删除操作体会此约束,截图说明Set Null策略的结果。
(2) 插入数据并截图:
Student表插入数据:
```
INSERT INTO Student VALUES ('101', '张三', '男', 20, '计算机系');
INSERT INTO Student VALUES ('102', '李四', '女', 22, '电子系');
INSERT INTO Student VALUES ('103', '王五', '男', 28, '自动化系');
INSERT INTO Student VALUES ('104', '赵六', '女', 25, '通信系');
```
Course表插入数据:
```
INSERT INTO Course VALUES ('1', '高等数学', NULL, 6);
INSERT INTO Course VALUES ('2', '大学英语', NULL, 4);
INSERT INTO Course VALUES ('3', 'C语言程序设计', '1', 4);
INSERT INTO Course VALUES ('4', '计算机组成原理', '3', 5);
```
SC表插入数据:
```
INSERT INTO SC VALUES ('101', '1', 90);
INSERT INTO SC VALUES ('101', '3', 85);
INSERT INTO SC VALUES ('102', '1', 80);
INSERT INTO SC VALUES ('102', '2', 75);
INSERT INTO SC VALUES ('103', '1', 95);
INSERT INTO SC VALUES ('103', '2', 85);
INSERT INTO SC VALUES ('103', '3', 90);
INSERT INTO SC VALUES ('103', '4', 85);
INSERT INTO SC VALUES ('104', '1', 60);
INSERT INTO SC VALUES ('104', '2', 80);
```
Student表数据截图:
![image-1.png](attachment:image-1.png)
Course表数据截图:
![image-2.png](attachment:image-2.png)
SC表数据截图:
![image-3.png](attachment:image-3.png)
(3)将student表上sage从20到50的约束修改为sage从15到30:
```
ALTER TABLE Student DROP CONSTRAINT student_chk_sage;
ALTER TABLE Student ADD CONSTRAINT student_chk_sage CHECK (sage BETWEEN 15 AND 30);
```
(4)在SC表中,修改外键约束sc_fk_sno,实现在Student表中删除和修改时可以级联删除和修改SC表中的相关数据,并通过删除和修改操作体会此约束,截图说明级联删除的结果:
首先,我们需要修改外键约束,增加ON DELETE CASCADE和ON UPDATE CASCADE选项:
```
ALTER TABLE SC DROP CONSTRAINT sc_fk_sno;
ALTER TABLE SC ADD CONSTRAINT sc_fk_sno FOREIGN KEY (sno) REFERENCES Student(sno) ON DELETE CASCADE ON UPDATE CASCADE;
```
级联删除的结果截图:
![image-4.png](attachment:image-4.png)
(5)在SC表中,修改外键约束sc_fk_cno,实现在Course表中修改cno时可以级联修改SC表中的相关数据,删除时的策略不变(仍为restrict),并通过修改和删除操作体会此约束,截图说明级联修改的结果:
首先,我们需要修改外键约束,增加ON UPDATE CASCADE选项:
```
ALTER TABLE SC DROP CONSTRAINT sc_fk_cno;
ALTER TABLE SC ADD CONSTRAINT sc_fk_cno FOREIGN KEY (cno) REFERENCES Course(cno) ON DELETE RESTRICT ON UPDATE CASCADE;
```
级联修改的结果截图:
![image-5.png](attachment:image-5.png)
(6)删除SC表上对于grade在大于等于0到小于等于100分之间的约束:
```
ALTER TABLE SC DROP CONSTRAINT sc_chk_grade;
```
(7)在course表中,修改外键约束course_fk_cpno,实现在course表中删除某课程时,以此课程为先修课的cpno字段自动被设置为空;修改时的策略不变(仍为restrict)。通过删除操作体会此约束,截图说明Set Null策略的结果:
首先,我们需要修改外键约束,增加ON DELETE SET NULL选项:
```
ALTER TABLE Course DROP CONSTRAINT course_fk_cpno;
ALTER TABLE Course ADD CONSTRAINT course_fk_cpno FOREIGN KEY (cpno) REFERENCES Course(cno) ON DELETE SET NULL ON UPDATE RESTRICT;
```
Set Null策略的结果截图:
![image-6.png](attachment:image-6.png)
阅读全文