主键和外键是学生成绩管理系统中确保数据关联准确与完整性的核心机制。student表以id为主键,course表以cid为主键,score表以(student_id, course_id)为联合主键,并分别引用student.id和course.cid作为外键,从而防止无效数据插入和孤立记录产生。

在学生成绩管理系统中,主键和外键共同构成数据表之间可靠关联的基础,没有它们,就无法准确查出“张三在数学课上的期中成绩”,也无法防止录入不存在的学生或不存在的课程的成绩。
设计学生表并设置主键
新建 student 表,包含 id、name、gender、birth_date 字段;其中 id 字段必须设为主键,因为每名学生必须有唯一标识,否则系统无法区分重名学生(如两个“李四”)。
执行 SQL:CREATE TABLE student (id INT PRIMARY KEY, name VARCHAR(20), gender CHAR(1), birth_date DATE);
【id 必须是整型且非空,否则后续外键引用会失败】
创建课程表并定义主键
新建 course 表,字段包括 cid、cname、credit;cid 是课程唯一编号,作为该表主键。
SQL 语句:CREATE TABLE course (cid CHAR(8) PRIMARY KEY, cname VARCHAR(30), credit TINYINT);
注意:cid 用 CHAR(8) 而非 INT,是因为课程编码常含字母(如 “CS101A”),INT 无法存储。
构建成绩表并同时配置主键与外键
成绩表 score 需要记录学生、课程、分数三者关系,因此必须包含 student_id 和 course_id 两个字段,并将它们联合设为主键——同一学生对同一门课的成绩只能有一条记录。
第一步:创建基础表结构,暂不加约束
CREATE TABLE score (student_id INT, course_id CHAR(8), score DECIMAL(4,1));
第二步:添加主键约束
ALTER TABLE score ADD PRIMARY KEY (student_id, course_id);
第三步:分别添加外键约束,指向 student 和 course 表
ALTER TABLE score ADD FOREIGN KEY (student_id) REFERENCES student(id);
ALTER TABLE score ADD FOREIGN KEY (course_id) REFERENCES course(cid);
这一步做完后,向 score 表插入 student_id = 999 的记录会失败——因为 student 表里没有 id = 999 的学生,数据库自动拦截非法关联。
验证外键约束是否生效
方法一:尝试插入一条引用不存在学生的成绩记录
INSERT INTO score VALUES (999, 'CS101A', 85.5);
执行报错:Cannot add or update a child row: a foreign key constraint fails。
方法二:删除一个仍有成绩记录的学生
先执行 DELETE FROM student WHERE id = 1;
若未提前删除该生所有成绩,操作直接被拒绝。
【外键默认启用级联限制(RESTRICT),不是自动删除关联成绩】

















