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

标签 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 个设备 id=3,id=4 但它们都有相同的 parent_dev_id=2

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

这是表格 enter image description here

如您所见,带有 {id=3,parent_dev_id=NULL} 的设备中还有另外 2 个设备 例如。带有 {id=4,parent_dev_id=3} 和设备 {id=5,parent_dev_id=3} 的设备,它是设备内部的设备。 是否可以限制 {id!=parent_dev_id}{id=3,parent_dev_id=NULL} 的第一行,这样你就不能添加 {parent_dev_id= 3}。如果我们这样做,tt 将是一个无休止的设备循环,这些设备在没有任何好处的情况下引用自己

最佳答案

您可以在此处执行 2 个解决方案选项:

  1. 在您的代码中编写 idparent_id 不相等的逻辑
  2. 在插入之前将数据库中的逻辑编写为触发器,以在 parent_idid 不能相等的情况下执行相同的操作。

您将遇到的问题是 id 是否是一个生成的 id。那么你要问的情况就很棘手了。在插入时,这可能是异常情况。但是,对于可能是有效问题的更新,您需要为 #2 触发更新 idparent_id 不相等的记录.

关于php - 防止自引用表中的主键和外键重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371741/

相关文章:

Mysql 时间记录为 Unixtime 而不是 Mysql Timestamp

mysql - 安排事件并让事件跨越午夜

java - 即使我声明了映射类,未知实体也会 hibernate

php - Laravel 查询生成器 - 联合 - 未找到列错误

php - APNS PHP 不发送通知

php - 从 Microsoft Word 发布博客时出现格式错误

php - 将数组键设置为另一个数组值的值 - PHP

php - 如何在不同的页面显示不同的记录?

java - 如果在数据库中找不到数据则插入数据,否则更新数据

MySQL 条件自连接