[英]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.