Mysql 一个表中的两列是否可以具有另一个表中相同列的外键?
我在数据库中有两个表,Person和PetMysql 一个表中的两列是否可以具有另一个表中相同列的外键?,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), 外键(原
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是否允许。)它不是唯一键,只是一个索引。这应该很好用