MySQL中的主键(Primary Key)和外键(Foreign Key)是关系型数据库中用于维护数据完整性和一致性的约束。
假设我们有两个表:students
和 courses
,其中 students
表存储学生信息,courses
表存储课程信息。我们希望记录每个学生选修了哪些课程。
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);
CREATE TABLE student_courses (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
原因:
解决方法:
-- 示例:创建外键失败的情况
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100)
);
CREATE TABLE courses (
course_id INT PRIMARY KEY,
course_name VARCHAR(100)
);
CREATE TABLE student_courses (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- 如果 courses 表不存在,会报错
原因: 当尝试插入或更新数据时,如果外键引用的值在被引用表中不存在,就会发生外键约束冲突。
解决方法:
ON DELETE
和 ON UPDATE
子句来处理级联删除或更新。-- 示例:使用 ON DELETE CASCADE
CREATE TABLE student_courses (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE,
FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
);
-- 删除学生时,相关的选课记录也会被删除
DELETE FROM students WHERE student_id = 1;
希望这些信息对你有所帮助!如果有更多问题,欢迎继续提问。
领取专属 10元无门槛券
手把手带您无忧上云