如何在 MySQL 中同時使用自動增量列和不同的主鍵?

Patricia Arquette
發布: 2024-11-03 08:57:29
原創
971 人瀏覽過

How can I use both an auto-increment column and a different primary key in MySQL?

MySQL:自動增量和主鍵共存的挑戰

MySQL 在嘗試定義自動增量列和非自動增量列的主鍵時遇到了挑戰自動增量列。預設情況下,MySQL規定只能有一個自增列,並且必須將其指定為主鍵。在嘗試優化表格效能和資料檢索效率時,這可能會導致混亂。

案例研究:成員管理表

考慮以下範例:id 列標記為自動的成員表增量以便於可視化監控,而memberid列則作為查詢中成員標識的主鍵。目標是在建立 memberid 作為主鍵的同時保持自動增量功能。

遇到錯誤

嘗試使用PRIMARY KEY (memberid) 建立表格會導致錯誤:

1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
登入後複製

潛在解決方案

儘管有錯誤,但可以同時擁有自動增量列和不同的主鍵。這裡有兩種可行的方法:

1。為自增列建立索引

在id列上建立索引,以便根據id和memberid進行高效率擷取。修改後的表定義如下:

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`)
) ENGINE = MYISAM;
登入後複製

2.使自增列成為主鍵的一部分

重新定義表,將id 列包含在主鍵組合中,使id 和memberid 成為主鍵標識的定義因素。修改後的定義變為:

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 (`id`, `memberid`)
) ENGINE = MYISAM;
登入後複製

透過實作其中一種方法,您可以平衡自動增量列的需求(以方便視覺)和使用自訂鍵(memberid)以實現高效的成員識別查詢,而不影響表格效能。

以上是如何在 MySQL 中同時使用自動增量列和不同的主鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板