2011-09-08 69 views
36

這是什麼代碼之間的區別:主鍵定義CREATE TABLE語句

CREATE TABLE samples (
    sampleid INT(11) NOT NULL AUTO_INCREMENT, 
    sampledate DATE NOT NULL, 
    location VARCHAR(25) NOT NULL, 
    PRIMARY KEY (sampleid) 
) 
ENGINE=InnoDB; 

這:

CREATE TABLE samples (
    sampleid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    sampledate DATE NOT NULL, 
    location VARCHAR(25) NOT NULL, 
) 
ENGINE=InnoDB; 

代碼?

所以一個單獨的PRIMARY KEY語句或作爲列定義的一部分。列定義中UNIQUE INDEX和UNIQUE關鍵字的同一問題。

+0

都是相同的,不是嗎?它只是寫作的方式。 –

+0

我也認爲兩者都是一樣的。 – giga

+1

我不完全同意,請參閱@thomasrutter的答案 – waanders

回答

39

第二種語法只是一個快捷方式,允許您指定列並在其上添加索引。

如果您只是想創建一列並在其上添加索引,這可以很好地工作。

如果您想要執行更復雜的操作,例如基於多個列而不是單個列添加索引,或者如果要在現有列上添加或更改索引,則需要使用第一種語法;也就是說,您不是同時創建列和索引。

+4

謝謝!我喜歡帶有論據的答案 – waanders

0

有很多方法可以給貓以上2個例子只是其中2個。它們是相同的。沒有區別。

+0

我並不完全同意,請參閱@thomasrutter的回答 – waanders

+0

更準確地說,他提供的兩個示例完全相同,但前一個示例允許使用比後者。 –

1

MySQL允許使用PRIMARY KEY指令來動態設置主鍵。只能在創建列時調用PRIMARY KEY作爲構造函數的參數。 PRIMARY KEY(X),PRIMARY KEY(Y),PRIMARY KEY(Z)允許在後續查詢中更改主鍵。

1

我看到它的方式是..第一種方法是用來創建複合鍵。如果表中只有主鍵,則主要使用第二種方法(對我更易讀)。

第二種方法不能使用,如果你想實現複合鍵