首頁  >  文章  >  資料庫  >  MySQL中自增列可以不作為主鍵而存在嗎?

MySQL中自增列可以不作為主鍵而存在嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-02 01:20:02832瀏覽

Can Auto-Increment Columns Exist Without Being the Primary Key in MySQL?

解決不正確的表定義錯誤:平衡自增和主鍵

該場景涉及一個MySQL 表,其中id 列作為可視化的自增字段方便,而memberid 列充當實際的唯一鍵。但是,嘗試使用 PRIMARY KEY (memberid) 定義表會導致錯誤 (1075),指出只能有一個自動列且它必須是一個鍵。

解決錯誤:保留自動增量和唯一鍵

為了解決這個問題,可以有一個不是主鍵的自動遞增列,只要有索引(key) 是在其上定義的。修改後的表定義如下:

<code class="sql">CREATE TABLE members (
  id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  memberid VARCHAR(30) NOT NULL,
  `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  firstname VARCHAR(50) NULL,
  lastname VARCHAR(50) NULL,
  PRIMARY KEY (memberid),
  KEY (id)                          # or: UNIQUE KEY (id)
) ENGINE = MYISAM;</code>

透過在id列上新增KEY或UNIQUE KEY索引,在memberid列成為主鍵的同時保持自增功能,從而可以基於memberid 值。

選擇最佳方法:平衡效能和空間

最佳選擇取決於效能和磁碟空間的相對重要性。如果效能至關重要,則維護自動遞增 id 欄位並在 memberid 上使用索引可提供平衡:

  • 自動遞增 id 提供高效率的排序和範圍查詢。
  • memberid 上的索引可確保使用唯一的成員識別碼進行快速尋找。

但是,如果磁碟空間很大如果您擔心,請考慮完全刪除 id 列並依賴 memberid 列作為主鍵和自動遞增欄位。這種方法犧牲了一些性能來提高空間利用率。最終,性能和空間之間的選擇取決於應用的特定要求。

以上是MySQL中自增列可以不作為主鍵而存在嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn