使用非主键的列创建外键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用非主键的列创建外键相关的知识,希望对你有一定的参考价值。

我在MariaDB中观察到一些奇怪的行为,我没有得到:

CREATE TABLE foo (id INT);

CREATE foo1 (
  id INT,
  FOREIGN KEY (id) REFERENCES foo(id));

-- doesn't compile

CREATE foo2 (
  id INT REFERENCES foo(id));

-- compiles, but foo2(id) isn't a foreign key

我想使用一个表来将列限制为一组值,但它似乎没有成功,就像我想要它...

答案

考虑以下观察:

  • CREATE foo1 ...CREATE foo2 ...,它不是一个有效的语法。见CREATE TABLE
  • MariaDB接受REFERENCESALTER TABLE语句中的CREATE TABLE子句,但该语法不起作用。 MariaDB只是解析它而不返回任何错误或警告,以便与其他DBMS兼容。见Foreign Keys
  • 引用的列必须是PRIMARY KEY或UNIQUE索引。见Foreign Keys

以上是关于使用非主键的列创建外键的主要内容,如果未能解决你的问题,请参考以下文章

mysql外键

mysql非主键自增长

休眠:外键的列数错误

( 10 )MySQL中的外键

MySQL面试精华提炼

mysql中的外键foreign key