如何使外键值与主键值相同?

时间:2017-11-01 21:39:12

标签: mysql

我多次尝试重写这个问题,我似乎无法理解如何问这个问题。我一直在研究过去2个小时,我不知道我是不是在寻找错误的东西。我已经阅读了外键(https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html)上的MYSQL文档。根据我的理解,外键指向主键,外键值应该复制主键值。这对于存储可能重复的信息是有帮助的,所以说是一对多的关系。

当我尝试将其应用于我的mysql表时,我将外键约束添加到指向第一个表的主键的第二个表中。为了学习,我的第二个表中的其他所有内容都可以为空 当我在第一个表中输入查询时,主键自动递增,但是,未更新外键值(在第二个表中)以复制主键。

我正在尝试了解与主键的外键关系是否无效/无法正常工作,或者如果是正确的我需要手动查询第二个表中的insert命令来复制第一个表主键,并且外键不会自动复制主键的值。如果是这种情况,如果值不需要链接/相同,那么主键和外键的重点是什么?我真的很沮丧并且感到愚蠢,因为在从不同来源阅读多个页面后我不理解键的关系。

2 个答案:

答案 0 :(得分:0)

PRIMARY KEY - FOREIGN KEY是一种在表之间创建关系的方法。请考虑以下表格:学生,课程,班级。为简单起见,

Student(StudentId, StudentName)
Course(CourseId, CourseName)
Class(ClassId, CourseId, StudentId)

在这种情况下,Class表具有引用Student和Course表的外键。您可以添加新的学生和/或课程,但它当然不会自动添加到课程表,因为学生可能不会注册课程。课程可能不会立即有课程,因为可能没有教师可以教授。

班级需要学生和课程。这是关系有用的地方。学生必须先存在于Student表中才能添加到Class中。课程必须存在才能存在。

答案 1 :(得分:0)

如果要确保表之间的一对一关系,那么在第一个表中添加一行总是会在第二个表中创建一个对应的行,您可以使用AFTER INSERT触发器第一张桌子。它可以使用NEW.id来获取分配给新行的ID,然后在第二个表上执行INSERT以创建一行,并将其作为外键。

相关问题