mysql将表中的多个外键复制到同一主键
我有一个表mysql将表中的多个外键复制到同一主键,mysql,sql,foreign-keys,primary-key,referential-integrity,Mysql,Sql,Foreign Keys,Primary Key,Referential Integrity,我有一个表user,其中userID是主键。我有另一张表,名为朋友。在Friends表中,我有两个用户作为朋友,由UserID和frnid列表示,其中UserID和frnid都应该是表user中的UserID 我想强制执行数据完整性。我可以用这样的东西吗 ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`userId`, `friendId`) REFERENCES `users` (`userId`, `userId`) ON DELETE CASCADE
user
,其中userID
是主键。我有另一张表,名为朋友
。在Friends
表中,我有两个用户作为朋友,由UserID
和frnid
列表示,其中UserID
和frnid
都应该是表user
中的UserID
我想强制执行数据完整性。我可以用这样的东西吗
ADD CONSTRAINT `ufd_users_fk` FOREIGN KEY (`userId`, `friendId`)
REFERENCES `users` (`userId`, `userId`) ON DELETE CASCADE ON UPDATE CASCADE;
我想知道
REFERENCES
users(
userId,
userId)
是否多次正确引用列?我之所以不创建两个单独的约束,是因为两个用户都必须存在于表user
中。不,您应该创建两个外键:
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\u Users\u fk
的元素,我应该选择不同的约束名称吗?@user2320445,是的,在SQL中,即使该名称的约束属于另一个表,如果约束名称在同一架构中,则会发生冲突。我从未在MySQL中看到过这种特殊的错误消息,但它似乎在MicrosoftSQLServer中很常见。有关此错误以及如何修复此错误的详细信息,请参阅。