2011-10-03 47 views
0

在php myadmin它說它是沒有用的定義自動增量列作爲主鍵的表。你可以刪除主鍵約束。 (因爲兩者都做同樣的工作)。是否有沒有用於定義自動增量列作爲主鍵

這是真的。我應該刪除主鍵約束嗎?

將不是很好有一個主鍵列在where子句,而不是自動遞增列

+1

明確定義您的PK總是一個好主意。即使它是多餘的。如果它在這個版本的MySQL中,它可能不是新版本。只要把PK條款留在那裏。 – Johan

+0

Johan在這裏。您不知道數據庫軟件如何進化,並確定無法預測您的數據庫何時需要爲自動分析功能正確定義所有元數據。 – Coyote

回答

1

保持PK約束。它會爲您節省一些麻煩:

  • 如果您打算使用某些框架檢查此約束以確定哪些列用作PK。如果約束不存在,它們將丟失或需要額外的配置。
  • 當您使用數據庫設計軟件時,如果您的數據庫設計得當,它會更好。
  • 當您必須更改數據庫軟件(升級或更改品牌)時,您會很高興在SQL語句中正確定義所有約束。
+0

+1你提出一個好點。 – Johan

+0

例如,查看http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.defining.primary-key。 – Coyote

1

可以創建一個auto_incrementing 沒有它是主鍵列:

這種說法是合法的:

mysql> create table silly_but_possible (
    id int auto_increment not null, 
    xx varchar(9), 
    key(id), 
    primary key (xx)); 
Query OK, 0 rows affected (0.15 sec) 

所以,如果你想要你的auto_incrementing列是PK,你最好定義它是這樣的。
請注意,表(目前)只能有一個auto_incrementing列。

如果你沒有定義PK會發生什麼?
如果你沒有,MySQL會爲你定義一個隱藏的auto_incrementing PK。
但是,如果您已經有auto_increment列,那麼該列將始終有一個索引,並且因爲只能有一個auto_incrementing列,所以MySQL(目前!)沒有其他選擇,只能將該行提升爲主鍵。

1

當你將一列定義爲auto_increment時,它必須是鍵(主鍵,唯一索引)。

舉一個例子

的MySQL>創建表測試

-> (id int(5) auto_increment, 
-> name char(10) 
->); 

ERROR 1075(42000):不正確的表定義;只能有一個自動列,它必須定義爲一個鍵

所以當我們將列定義爲auto_increment時,它應該是key.So最好將列定義爲PK。

數據庫管理器使用主索引來有效訪問錶行,並允許數據庫管理器強制執行主鍵的唯一性。