利用外键级联删除更新
时间: 2024-06-14 16:07:24 浏览: 171
外键级联删除和更新是一种数据库设计中常用的功能,它可以在删除或更新主表中的数据时,自动删除或更新相关联的从表中的数据。下面是两个示例来演示如何利用外键实现级联删除和更新:
1. SQL Server中的级联删除和更新:
```sql
-- 创建外键约束
ALTER TABLE dbo.C
ADD CONSTRAINT FK_C_A_AID FOREIGN KEY (AID)
REFERENCES dbo.A (AID)
ON DELETE CASCADE
ON UPDATE CASCADE;
```
2. MySQL中的级联删除和更新:
```sql
-- 创建外键约束
ALTER TABLE C
ADD CONSTRAINT FK_C_A_AID FOREIGN KEY (AID)
REFERENCES A (AID)
ON DELETE CASCADE
ON UPDATE CASCADE;
```
这些示例中,`ON DELETE CASCADE`表示当主表中的数据被删除时,从表中相关联的数据也会被自动删除;`ON UPDATE CASCADE`表示当主表中的数据被更新时,从表中相关联的数据也会被自动更新。
相关问题
利用SQL语句创建ScoreDB数据库。 (2)利用SQL语句创建Class表,创建主键约束。 (3)利用SQL语句创建Student表,创建主键约束,设置sex字段的取值只能是“男”或“女”,创建关于Class表的外键约束,并设置为级联更新和级联删除。
首先,我们将会通过SQL语句逐步创建这三个表:
1. **创建ScoreDB数据库** (假设已经存在,这里仅创建表结构)
```sql
CREATE DATABASE ScoreDB;
USE ScoreDB; -- 切换到ScoreDB数据库
```
2. **创建Class表**
```sql
CREATE TABLE Class (
class_id INT PRIMARY KEY AUTO_INCREMENT,
className VARCHAR(50) NOT NULL,
teacherName VARCHAR(50),
FOREIGN KEY (teacherName) REFERENCES Teacher(name) -- 假设Teacher表已存在,关联教师信息
);
```
这里设置了`class_id`为主键并自动增长。
3. **创建Student表**
```sql
CREATE TABLE Student (
student_id INT PRIMARY KEY AUTO_INCREMENT,
studentName VARCHAR(50) NOT NULL,
sex ENUM('男', '女') CHECK (sex IN ('男', '女')), -- 设置sex字段只能是'男'或'女'
class_id INT,
FOREIGN KEY (class_id) REFERENCES Class(class_id) ON DELETE CASCADE ON UPDATE CASCADE -- 级联更新和级联删除
);
```
在这个表中,`student_id`为主键,`sex`字段限制了性别选项,并且与`Class`表建立了外键关系,当`Class`表的数据发生变化时,会相应地更新或删除`Student`表中相关的记录。
利用SQL删除student_2中学号为201215121学生记录,并查看SC_2中是否级联删除。将学号201215122更新为201215155,查看SC_2中是否级联更新。删除Course_2中课程号为1课程记录,验证拒绝删除是否成功。将Course_2中课程号为3改为30,并查看SC_2中是否级联更新。删除student_2表中完整性约束C1。
好的,您的问题是关于SQL的操作,我会尽力回答。以下是您的问题的答案:
1. 利用SQL删除student_2中学号为201215121学生记录,并查看SC_2中是否级联删除。
```
DELETE FROM student_2 WHERE Sno='201215121';
SELECT * FROM SC_2 WHERE Sno='201215121';
```
如果SC_2表中有该学生的成绩记录,则级联删除会将该学生的成绩记录一起删除。
2. 将学号201215122更新为201215155,查看SC_2中是否级联更新。
```
UPDATE student_2 SET Sno='201215155' WHERE Sno='201215122';
SELECT * FROM SC_2 WHERE Sno='201215155';
```
如果SC_2表中有该学生的成绩记录,则级联更新会将该学生的成绩记录的学号一起更新。
3. 删除Course_2中课程号为1课程记录,验证拒绝删除是否成功。
```
DELETE FROM Course_2 WHERE Cno='1';
```
如果Course_2表中有其他表的外键引用了该课程号,则会拒绝删除并报错。
4. 将Course_2中课程号为3改为30,并查看SC_2中是否级联更新。
```
UPDATE Course_2 SET Cno='30' WHERE Cno='3';
SELECT * FROM SC_2 WHERE Cno='30';
```
如果SC_2表中有该课程的成绩记录,则级联更新会将该课程成绩记录的课程号一起更新。
5. 删除student_2表中完整性约束C1。
```
ALTER TABLE student_2 DROP CONSTRAINT C1;
```
这将删除student_2表中的完整性约束C1。注意,在删除约束之前应该先备份数据并确保不会破坏数据的完整性。
阅读全文