我想知道,如果一个表没有主键,可以在两个表之间创建一个引用约束。
例如:
**Table1** {
Column1(Unique Key)
Column2(Not Null)
Column3(Candidate key)
}
**Table2** {
Column1(Primary Key)
Column2(Foreign Key) //Can it refer to any of the column in Table1
Column3
}
答案 0 :(得分:1)
它可以引用表1中的任何一列
如果要为另一个非主键的列创建外键,则该键必须是唯一的。 (列1上的唯一键)
但是,什么并不能阻止你将Table1的Column1作为主键? 它已经是一个唯一键,而Table1没有主键......
答案 1 :(得分:1)
它可以引用表1中的任何一列
我自己还没有对它进行过测试,但我无法确定它是如何工作的,但显然,只要你有一个索引(any kind of index :-!),列就是第一个:< / p>
InnoDB表的外键定义如下 条件:
InnoDB允许外键引用任何索引列或列组。但是,在引用的表中,必须有一个索引 其中引用的列被列为第一列 同样的订单。
InnoDB当前不支持具有用户定义分区的表的外键。这意味着没有用户分区的InnoDB table可能包含引用的外键引用或列 外键。
InnoDB允许外键约束引用非唯一键。这是标准SQL的InnoDB扩展。
但即使引擎允许,我也不建议使用非唯一索引(如示例中的Table1.Column2
)。