外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性。

精简关联数据,减少数据冗余避免后期对大量冗余处理的额外运维操作。
降低应用代码复杂性,减少了额外的异常处理相关数据管理全由数据库端处理。
增加文档的可读性特别是在表设计开始,绘制 ER 图的时候,逻辑简单明了,可读性非常强。
性能压力外键一般会存在级联功能,级联更新,级联删除等等。在海量数据场景,造成很大的性能压力。比如插入一条新记录,如果插入记录的表有 10 个外键,那势必要对关联的 10 张表逐一检查插入的记录是否合理,延误了正常插入的记录时间。并且父表的更新会连带子表加上相关的锁。
其他功能的灵活性不佳比如,表结构的更新等。
外键参照动作列表:
CASCADE:级联,子表跟随父表更新外键值
SET NULL:子表更随主表更新外键值为 NULL
RESTRICT/ NO ACTION:默认,限制父表改动外键值
SET DEFAULT:目前产生的效果和 RESTRICT 相同。
1、在CREATE TABLE语句中,通过FOREIGN KEY关键字来添加外键;
2、在ALTER TABLE语句中,通过ADD和FOREIGN KEY关键字来添加外键。
外键作为关系数据库中的重要概念,具有一定的优缺点。其优点在于可以帮助确保数据完整性和一致性,通过强制关联和约束,防止意外或错误地更改或删除相关数据,提高数据库的可靠性和稳定性。
然而,外键也可能导致性能下降,特别是在大型数据库中,需要谨慎设计和使用,避免不必要的关联和约束,以提高查询和操作效率。因此,合理使用外键可以带来诸多好处,但需注意在实际应用中的性能影响。
主键:表中经常有一个列或多个列的组合,其值能唯一的标识表中的每一行。这样的一列或多列称为表的主键。
外键:用来表示表与表之间联系,是表中的一个列。
主键和外键都是用于维护数据库完整性的一种机制。
区别:1、主键是唯一标识一条记录,不能重复,不允许为空;而外键可以重复,可以是空值;
2、主键是用来保持数据完整性,外键是用来建立与其他表联系用的;
3、主键只有一个,外键可以有多个。外键
abc这3张表在设计的时候就应该是把主键和外键设好的吧,所以这和插入数据时所使用的语句是没有什么关系的,而数据的对应关系就是这样的吧A--〉aB--〉b,C--〉c。a,b,c表只多了个时间字段,那你给这个字段设默认值的时候设为getdate()就可以了不用人为的去插入时间了~用简单的SQL就可以了比如SELECT*INTOaFROMA