簡體   English   中英

MySQL覆蓋auto_increment?

[英]MySQL override auto_increment?

我正在創建一個消息系統(使用PHP),並希望為每條消息分配一個ID號(除了每個具有唯一ID號的實際消息)...但是,如果有人回復消息,那么我希望能夠給該消息提供與被回復的消息相同的ID ...當然,我可以按時間顯示它們並按順序顯示它們。

那么,如果我給字段一個auto_increment類型是否能夠被覆蓋?

含義...每條新消息都有自動值,例如1,2,3等,但有人回復2號,所以它的ID也需要2

或者有更好的方法嗎?

絕對沒有什么可以阻止您將任意值分配給AUTO_INCREMENT列。 如有必要,表格計數器將相應調整。

但是,您不能將AUTO_INCREMENT設置為不唯一的列。

老實說,我無法理解你的設計。 典型的消息傳遞系統如下所示:

message_id in_reply_to
========== ===========
         1        NULL
         2        NULL
         3           1
         4        NULL
         5           1
         6           3
         7        NULL

復制ID類似於使用ID的目的。

更新#1: OMG,似乎在某些情況下它實際上可以完成:

對於MyISAM表,您可以在多列索引中的輔助列上指定AUTO_INCREMENT。 在這種情況下,AUTO_INCREMENT列的生成值計算為MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。 當您想要將數據放入有序組時,這非常有用。

http://dev.mysql.com/doc/refman/5.5/en/example-auto-increment.html

更新#2:對於記錄,我剛剛測試了它,你也可以在InnoDB表中使用重復的自動遞增ID:

CREATE TABLE foo (
    foo_id INT(10) NOT NULL DEFAULT '0',
    bar_id INT(10) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (foo_id),
    INDEX bar_id (bar_id)
)
ENGINE=InnoDB

不,auto_increment列不能多次出現。

我會保持每個消息ID唯一 - 無論是通過自動增量還是通過uuid。 在thread_id的消息結構中添加一個額外的列 - 創建時唯一,然后讓所有回復包含此thread_id以邏輯方式將它們鏈接在一起。

你這樣做的方法是在你的表中有一個名為parent_id列或類似的東西。

原始消息的parent_id為NULL。

然后,當有人發布對郵件的回復時,郵件的原始ID將進入新郵件的parent_id列。 例如:

id    text           parent_id    created_at
============================================
1    'Lorem ipsum'     null         [time]
2    'Lorem ipsum'     1            [time]
3    'Lorem ipsum'     1            [time]

您甚至可以進一步嵌套回復:

id    text           parent_id    created_at
============================================
1    'Lorem ipsum'     null         [time]
2    'Lorem ipsum'     1            [time]
3    'Lorem ipsum'     2            [time]

在后一種情況下,您可能需要某種遞歸函數來獲取所有嵌套消息; 第一種方式更簡單。

放置唯一ID的最佳方式是; 添加uniqid(rand())。

暫無
暫無

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

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