【问题标题】:mysql Multiple Foreign Keys in a Table to the Same Primary Keymysql 一个表中的多个外键指向同一个主键
【发布时间】:2017-01-09 04:11:19
【问题描述】:

我有一个表 useruserID 作为主键。我还有另一张桌子叫Friends。在Friends 表中,我有两个用户作为朋友,由UserIDFrndID 列表示,其中UserIDFrndID 应该是表user 中的userID

我想强制执行数据完整性。我可以使用这样的东西吗?

ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`userId`, `friendId`)
REFERENCES `users` (`userId`, `userId`) ON DELETE CASCADE ON UPDATE CASCADE;

我想知道REFERENCESusers(userId,userId) 是否正确引用了一个列?我没有创建 2 个单独的约束的原因是两个用户都必须存在于表 user 中。

【问题讨论】:

    标签: mysql sql foreign-keys primary-key referential-integrity


    【解决方案1】:

    不,你应该创建两个外键:

    ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`userId`) 
      REFERENCES `users` (`userId`) 
      ON DELETE CASCADE ON UPDATE CASCADE,
    ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`friendId`) 
      REFERENCES `users` (`userId`) 
      ON DELETE CASCADE ON UPDATE CASCADE;
    

    【讨论】:

    • Karwin 好吧,但问题是如果我删除一个用户,那么与该用户相关的所有朋友也会被删除..
    • 不,只会删除他们在 Friends 表中的行。用户表中的行不会被删除。
    • 当我写上面的命令我得到这个错误,数据模型已经有一个名为ufd_users_fk的元素,我应该选择不同的约束名称吗?
    • @user2320445,是的,在 SQL 中,即使该名称的约束属于另一个表,如果它们在同一架构中,约束名称也会发生冲突。我从未见过 MySQL 的特定错误消息,但它似乎在 Microsoft SQL Server 中很常见。请参阅stackoverflow.com/questions/3294375/… 了解有关此错误以及如何修复它的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2018-03-25
    • 2016-12-07
    • 2021-10-25
    相关资源
    最近更新 更多