Mysql 一个表中的两列是否可以具有另一个表中相同列的外键?

Mysql 一个表中的两列是否可以具有另一个表中相同列的外键?,mysql,sql,foreign-keys,foreign-key-relationship,Mysql,Sql,Foreign Keys,Foreign Key Relationship,我在数据库中有两个表,Person和Pet createtableperson( id INT不为空, 主键(id) ) 创建桌面宠物( id INT不为空, 原始所有者INT不为空, 当前所有者INT不为空, 主键(id), 外键(原始所有者) 推荐人(id), 外键(当前所有者) 推荐人(id) ) 我试图参考以前的主人,以及每只宠物的当前主人。我也试过了 CREATE TABLE Pet( id INT不为空, 原始所有者INT不为空, 当前所有者INT不为空, 主键(id), 外键(原

我在数据库中有两个表,Person和Pet

createtableperson(
id INT不为空,
主键(id)
)
创建桌面宠物(
id INT不为空,
原始所有者INT不为空,
当前所有者INT不为空,
主键(id),
外键(原始所有者)
推荐人(id),
外键(当前所有者)
推荐人(id)
)
我试图参考以前的主人,以及每只宠物的当前主人。我也试过了

CREATE TABLE Pet(
id INT不为空,
原始所有者INT不为空,
当前所有者INT不为空,
主键(id),
外键(原始所有者、当前所有者)
推荐人(id,id)
)

CREATE TABLE Pet(
id INT不为空,
原始所有者INT不为空,
当前所有者INT不为空,
主键(id),
外键(原始所有者、当前所有者)
推荐人(id)
)
但我得到了以下错误:

错误代码:1215。无法添加外键约束


这甚至可能实现吗?或者我需要创建某种桥接表来适应此情况吗?

请尝试以下操作:

CREATE TABLE IF NOT EXISTS `pet` (  
  `id` int(11) NOT NULL,  
  `original_owner` int(11) NOT NULL,  
  `current_owner` int(11) NOT NULL,  
  PRIMARY KEY (`id`),  
  KEY `origin` (`original_owner`),  
  KEY `current` (`current_owner`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


ALTER TABLE `pet`  
  ADD CONSTRAINT `pet_ibfk_2` FOREIGN KEY (`current_owner`) REFERENCES `person` (`id`),  
  ADD CONSTRAINT `pet_ibfk_1` FOREIGN KEY (`original_owner`) REFERENCES `person` (`id`);

问题是我在脚本中定义表的顺序。我的宠物比人先来。一旦我把人放在宠物之上,它就工作得很好。问题中的示例是我自己写的,因为我发布时手头没有实际的代码。

这是可能的,但您必须单独声明外键。我如何比第一个示例更单独地声明外键?这是可能的,但我认为更为普遍的做法是在第三张桌子上放宠物和它们的主人。然后,当需要当前和原始主人时,您可以选择最近的2个(或更多)。
密钥来源(原始主人)
子句是否意味着给定主人只能是一只宠物的原始主人(这是否意味着唯一性)?如果是这样,那就有问题了;例如,一个养猫人不能养一只以上的猫。外键约束看起来正确;不能在创建表中指定它们吗?(大多数DBMS都允许这样做;我不知道MySQL是否允许。)它不是唯一键,只是一个索引。这应该很好用