什么是没有外键约束的“钥匙”?

时间:2012-03-06 19:20:44

标签: mysql sql database

我有下表,它在vendor_id上强制执行外键:

CREATE TABLE `notes` (
  `vendor_id` varchar(20) NOT NULL DEFAULT '',
  KEY `vendor_id` (`vendor_id`),
  CONSTRAINT `notes_ibfk_1` FOREIGN KEY (`vendor_id`) REFERENCES `title` (`vendor_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我正在查看其他人的桌子,它有KEY,但没有显示CONSTRAINT,如下所示:

CREATE TABLE `notes` (
  `vendor_id` varchar(20) NOT NULL DEFAULT '',
  KEY `vendor_id` (`vendor_id`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

这对于KEY没有其他任何东西的意义/做法究竟是什么意思?

2 个答案:

答案 0 :(得分:5)

KEYINDEX的同义词,因此在这种情况下,vendor_id已在其上创建了索引,但未明确定义为表PRIMARY KEY ,这将强制独特。

来自MySQL CREATE TABLE docs

  

KEY通常是INDEX的同义词。当在列定义中给出时,键属性PRIMARY KEY也可以被指定为KEY。这是为了与其他数据库系统兼容而实现的。

答案 1 :(得分:3)

§12.1.14 "CREATE TABLE Syntax" of the Reference Manual中所述:

  

KEY通常是INDEX的同义词。在列定义中给出时,关键属性PRIMARY KEY也可以指定为KEY。这是为了与其他数据库系统兼容而实现的。

(第一句话适用于您的情况;所以它只是在vendor_id上创建一个名为notes.vendor_id的索引。)