这是面试中遇到的一个题
如果两个表的主键互为对方的外键如何处理?
方案一
适合直接在数据库中操作的时候用
set @@foreign_key_checks=OFF
方案二
外键是可以为null
的,所以在框架的ORM中使用时,把对应字段的外键设置为允许为null
,存的时候先存其中一个model
(此时外键为null
), 存完另一个model
再来更新其外键即可.
以Django为例
from django.db import models
class Action(models.Model):
step = models.ForeignKey('Step', related_name='step', null=True, blank=True)
class Step(models.Model):
action = models.ForeignKey('Action', related_name='action', null=True, blank=True)
存的时候这样
a = Action(step_id=None)
a.save()
s = Step(action_id=a.id)
s.save()
a.step_id = s.id
a.save()