MySQL中的主键(Primary Key)和外键(Foreign Key)是关系型数据库中用于确保数据引用完整性的约束。
假设我们有两个表:students 和 courses。students 表存储学生信息,courses 表存储课程信息。每个学生可以选修多门课程,因此我们需要在 students 表中添加一个外键,指向 courses 表的主键。
courses 表CREATE TABLE courses (
course_id INT AUTO_INCREMENT PRIMARY KEY,
course_name VARCHAR(100) NOT NULL
);students 表CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(100) NOT NULL,
course_id INT,
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);在这个例子中:
courses 表的 course_id 是主键。students 表的 course_id 是外键,它引用了 courses 表的 course_id。students 表中插入一个不存在于 courses 表中的 course_id。原因:尝试插入或更新的数据违反了外键约束,即引用的主键不存在。
解决方法:
-- 示例:插入一个不存在的 course_id
INSERT INTO students (student_name, course_id) VALUES ('Alice', 999);
-- 解决方法:先检查 courses 表中是否存在 course_id 为 999 的记录
SELECT * FROM courses WHERE course_id = 999;
-- 如果不存在,可以选择插入一个有效的 course_id 或更新 students 表中的记录
UPDATE students SET course_id = 1 WHERE student_name = 'Alice';原因:删除主键记录时,如果存在引用该主键的外键记录,会导致外键约束冲突。
解决方法:
ON DELETE CASCADE,这样删除主键记录时会自动删除相关的外键记录。CREATE TABLE students (
student_id INT AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(100) NOT NULL,
course_id INT,
FOREIGN KEY (course_id) REFERENCES courses(course_id) ON DELETE CASCADE
);-- 示例:删除 course_id 为 1 的课程
DELETE FROM courses WHERE course_id = 1;
-- 先删除引用 course_id 为 1 的学生记录
DELETE FROM students WHERE course_id = 1;
-- 再删除课程记录
DELETE FROM courses WHERE course_id = 1;希望这些信息对你有所帮助!如果有更多问题,欢迎继续提问。