数据库表里的外键能设置成主键吗?

数据库表里的外键能设置成主键吗?,第1张

拥有外键的表,其外键一般来自参照表的主键

比如学生表和选课表关联…

学生表主键是学号

课程表主键是课程号,

选课表外键是学号,课程号也是外键,主键是学号和课程号联合。

也就是父表(学生)(课程)的主键在子表(选课)中当外键。

一个表可有多个外键,只能有一个主键。

选课表里的学号取值必须来自学生表的学号。

外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。

例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。

titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。

扩展资料:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。

学号在成绩表(表2)中是主键,在学生表(表1)中是外键。如果不使用外键,表1的学号字段插了一个值(比如20140999999),但是这个值在表2中并没有,这个时候,数据库允许插入,并不会对插入的数据做关系检查。

然而在设置外键的情况下,插入表1学号字段的值必须要求在表1的学号字段能找到。 同时,如果要删除表2的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。

这就是所谓的保持数据的一致性和完整性。如右图,如果表1还引用表2的某个学号,却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。

参考资料:百度百科-外键

先创建需要外键参照的两个主表(学生)主键学号,(课程)主键课号。

然后创建选课表SC,学号和课号联合作主键,分别作外键。

create table sc(学号 char(6),课号 char(6),成绩 int,primary key (学号,课号),foreign key (学号)references 学生(学号),foreign key (课号)references 课程(课号))


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9881599.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存