防止自引用表中的主键和外键重复

时间:2017-02-21 15:41:19

标签: php mysql

例如:

我们有一个'device'的表id(primary key),通过parent_dev_id(foreign key)自我引用。

如果您的设备包含{id=1,parent_dev_id=NULL}并且您想要添加更多设备,则下一个设备的ID = 2且parent_id = 1或设备id=2,parent_dev_id=NULL包含2个设备{{1}但它们都有相同的id=3,id=4

是否可以拒绝或限制id == parent_dev_id的某些情况?因为我们不希望这是可能的

这是表格 enter image description here

如您所见,parent_dev_id=2设备中还有其他2个设备 例如。具有{id=3,parent_dev_id=NULL}和设备{id=4,parent_dev_id=3}的设备,它是设备内的设备。 是否可以在{id=5,parent_dev_id=3}的第一行限制{id!=parent_dev_id},以便您无法添加{id=3,parent_dev_id=NULL}。如果我们这样做,那将是无限循环的设备,它们自我引用而没有任何好处< / p>

1 个答案:

答案 0 :(得分:0)

您可以在此处执行两种解决方案选项:

  1. 在代码中写入idparent_id不相等的逻辑
  2. 在插入之前将数据库中的逻辑写为触发器,以执行parent_idid不能相等的相同操作。
  3. 如果id是生成ID,您将遇到的问题。遇到你所询问的情况会很棘手。在插入时,这可能是异常情况。但是,对于可能是有效问题的更新,您希望在#2中触发更新idparent_id不相等的记录。