」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > MySQL中可以存在不作為主鍵的自增列嗎?

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

發佈於2024-11-04
瀏覽:990

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

解決表定義錯誤錯誤:平衡自增和主鍵

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

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

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

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;

透過在id列上新增KEY或UNIQUE KEY索引,在memberid列成為主鍵的同時保持自增功能,從而可以根據memberid值進行高效查詢。

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

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

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

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

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3