2012-03-06 77 views
1

我有以下表,它強制對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

回答

5

KEYINDEX的同義詞,所以在這種情況下,vendor_id已在其上創建的索引,但還沒有具體地被定義爲表的PRIMARY KEY,這將強制執行的唯一性。

MySQL CREATE TABLE docs

KEY通常是INDEX的同義詞。當在列定義中給出時,鍵屬性PRIMARY KEY也可以被指定爲KEY。這是爲了與其他數據庫系統兼容而實現的。

3

§12.1.14 "CREATE TABLE Syntax" of the Reference Manual解釋:

KEY通常爲INDEX的同義詞。當在列定義中給出時,關鍵屬性PRIMARY KEY也可以指定爲KEY。這是爲了與其他數據庫系統兼容而實現的。

(第一句話是什麼適用於您的情況,所以它只是創造上notes.vendor_id名爲vendor_id的指數。)