簡體   English   中英

是否可以有一個允許重復的AUTO_INCREMENT列?

[英]Is it possible to have an AUTO_INCREMENT column that permits duplicates?

我有一個具有AUTO_INCREMENT字段的表。 當前,它也是一個主鍵。

但是,在某些情況下,我需要此AUTO_INCREMENT列來允許重復。 換句話說,兩個不同的行在AUTO_INCREMENT列中可以具有相同的值。 這將意味着擁有一個不是PRIMARY KEY的AUTO_INCREMENT字段。

這可能嗎?

我猜不是,因為每當嘗試這樣做時,都會出現此錯誤:

ERROR 1075 (42000) at line 130: Incorrect table definition; there can be only one auto column and it must be defined as a key

我喜歡擁有AUTO_INCREMENT字段,因為它使我不必在數據庫的其他位置手動存儲/增加單獨的計數器。 我可以只插入表中並獲取插入的值。 但是,如果我不能重復,看來我將不得不使用單獨的表來跟蹤和手動增加此字段。

更新:作為快速說明,我已經熟悉將AUTO_INCREMENT字段與另一個鍵組合在一起, 如此處所述 為了便於討論,我們假設由於數據庫中的其他限制,該解決方案將無法工作。

MySQL中的自動遞增字段必須是 (即索引)的一部分,但不一定是主鍵或唯一鍵的一部分。

CREATE TABLE mytable (
  id   INT PRIMARY KEY,
  otto INT AUTO_INCREMENT,
  KEY (otto)
);

-- allow the auto-increment to generate a value

INSERT INTO mytable (id, otto) VALUES (123, DEFAULT);

SELECT * FROM mytable;

> 123, 1

-- specify a duplicate value, overriding the auto-increment mechanism

INSERT INTO mytable (id, otto) VALUES (456, 1); 

SELECT * FROM mytable;

> 123, 1
> 456, 1

-- allow the auto-increment to generate another value

INSERT INTO mytable (id, otto) VALUES (789, DEFAULT);

SELECT * FROM mytable;

> 123, 1
> 456, 1
> 789, 2

聽起來像“子任務”是一個表,“任務”具有FK引用。 即,如果子任務被重用。

OTOH如果一個任務可以有多個子任務,並且一個子任務可以鏈接到多個任務,那么您將在一個單獨的表中查看多對多。

無論哪種情況,我都不認為您希望數據庫自動生成這些“鏈接ID”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM