当相关对象被删除时,如何维护外键?

dar*_*rse 3 database foreign-keys relational-database

假设我有来自两个不同表的两个对象,分别称为Student、 和School。该Student表存储了该表的外键School,因此是多对一的关系。例如:

Student Obj (pk = 251)
- school_pk = 24 (Attribute can be null)

School Obj (pk = 24)
Run Code Online (Sandbox Code Playgroud)

School现在,如果我删除主键为 24 的对象会发生什么?主键为 251 的对象Student在删除过程中是否也被更新,使其属性school_pk被设置为null

Mur*_*nik 7

开箱即用,如果您的数据库能够正确处理外键,则删除学校就会失败,因为仍然有学生引用它。

如果外键定义为on delete cascade,则删除学校也会删除引用该学校的所有学生。一些数据库还支持一个on delete set null选项,该选项会将所有引用学生的school_pk列更新为null他们引用的学校被删除时。