mysql 建立课程表Course和选课表SC间的外键关系FK_SC_Course,
时间: 2024-11-30 16:21:23 浏览: 7
MySQL中建立课程表`Course`和选课表`SC`之间的外键(Foreign Key, FK)关系通常用于表示两个表之间的关联,比如学生选择课程的关系。假设`Course`表有字段`course_id`作为主键,而`SC`表需要记录学生的`student_id`和选择的`course_id`。
在`SC`表中,你可以创建一个名为`fk_sc_course`的外键,其结构如下:
```sql
CREATE TABLE SC (
student_id INT NOT NULL,
course_id INT NOT NULL,
// 其他SC表字段...
FOREIGN KEY (course_id) REFERENCES Course(course_id)
);
```
这里,`FOREIGN KEY (course_id)`部分就是指定了`course_id`列是引用`Course`表的外键,`REFERENCES Course(course_id)`表示这个外键所参照的表和列。这样,在插入`SC`表的记录时,如果`course_id`不存在于`Course`表中,就会报错,确保数据的一致性和完整性。
相关问题
mysql建立student和sc间的外键关系FK_SC_Student
在MySQL中,要建立`student`表和`score_card`(`sc`)表之间的外键关系,通常需要以下几个步骤:
1. **创建学生表(student)**:
```sql
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
... 其他字段 ...
);
```
2. **创建成绩表(sc)**,假设有一个`student_id`字段用于关联学生ID:
```sql
CREATE TABLE score_card (
id INT AUTO_INCREMENT PRIMARY KEY,
subject VARCHAR(50),
grade INT,
student_id INT,
FOREIGN KEY (student_id) REFERENCES student(id)
);
```
`FOREIGN KEY (student_id) REFERENCES student(id)` 这一行声明了`student_id`是`score_card`表的一个外键,它引用的是`student`表的`id`字段。
3. **设置外键约束**:
- 如果`student`表已经存在,你可以使用`ALTER TABLE`来添加外键:
```sql
ALTER TABLE score_card ADD FOREIGN KEY (student_id) REFERENCES student(id);
```
- 如果`score_card`表是在`student`表之后创建的,则在创建时就应包含这个约束。
这样就建立了`student`和`sc`之间的外键关系,保证了`score_card`表中的`student_id`值总是存在于`student`表中存在的`id`值中。
(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)
阅读全文