有没有办法在表中没有主键的情况下创建外键关系

时间:2014-07-20 08:33:02

标签: mysql sql

我想知道,如果一个表没有主键,可以在两个表之间创建一个引用约束。

例如:

**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

}

2 个答案:

答案 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)。