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中很常见。有关此错误以及如何修复此错误的详细信息,请参阅。