2010-02-04 113 views
12

當創建包含我的數據庫結構的一個mysql轉儲,其中一個表顯示以下內容:主鍵與鍵

CREATE TABLE `completedTransactions` (
    `paymentId` int(10) unsigned NOT NULL, 
    `timestamp` int(15) unsigned NOT NULL, 
    `actionTaken` varchar(25) NOT NULL, 
    `response` varchar(255) NOT NULL, 
    `responseCode` int(5) NOT NULL, 

    PRIMARY KEY (`paymentId`,`timestamp`), 
    KEY `paymentId` (`paymentId`), 

主鍵是我所期待的,但我不能確定什麼最後一行是關於?

KEY `paymentId` (`paymentId`), 

這與索引有關嗎?

+1

我想知道爲什麼在這種情況下,在paymentId上創建了一個額外的索引,因爲主鍵也應該是索引。 因此,imho,額外的索引(鍵)已過時。 – 2010-02-04 11:41:27

+1

@Frederik:主鍵是一個複合鍵,因此它的索引將以此爲基礎。當僅根據'paymentId'進行搜索時,該索引可能沒有用處。 – 2010-02-04 11:44:46

+0

@Frederik Gheysels:由於'paymentId'和'timestamp'都屬於主鍵,所以在兩個字段上都會創建一個索引。所以可以爲'paymentId'創建一個額外的索引。 – 2010-02-04 11:45:12

回答

10

是的,KEY關鍵字只是INDEX關鍵字的別名。

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name 
    ... 
    {INDEX|KEY} [index_name] [index_type] (index_col_name,...) 
     [index_option] ... 

來源:MySQL Documentation: CREATE TABLE

1

引用的CREATE TABLE文檔:

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

2

KEY不是唯一的,PRIMARY KEYUNIQUE KEY是唯一的。