2013-02-11 104 views
-2

我有大約50k條目,我通過PHP插入到MySQL中。由於該系統允許多個用戶同時登錄並執行相同的插入數據操作,所以我們假設USER1啓動「插入」並且在相同的毫秒內,USER2開始在同一個表中插入數據 - 我很好奇MySQL是否會等待USER1完成處理並處理USER2條目,否則它會同時插入?在PHP中插入大量的行和自動增加ID

因此,遵循該邏輯,USER1的插入ID將從50k到100k從1到50k和USER2,或者在另一方面將它們洗牌?

...如果它會做「洗牌」有沒有辦法來防止這種情況?

P.S.我知道 - 我可以用user_id添加額外的字段,這樣我就可以區分哪個用戶做了實際的「輸入」,但是在這種情況下,我真的很想保留1-50k的空間用於USER1,50k-100k空間用於USER2。 ...

回答

1

要保留表格並自動爲您自動增加id,您應該在開始插入之前使用LOCKLOCK表格。否則,很可能會對id進行「洗牌」。

雖然注意什麼也沒有,甚至鎖定,保證了自動增量ID的連續性。我知道用一個連續的ID來插入塊會是一個「很好的接觸」,但這不是它們的目的,系統中也沒有保證這麼做。所以不要依賴它或以任何方式期待它。

+0

但是,如果他確實鎖定了表格,USER2的動作會給出錯誤,不會嗎? – 2013-02-11 18:27:28

+0

@Marco不,它只會延遲用戶2,直到用戶1解鎖桌子爲止。 (除非用戶2明確地想要失敗,如果表被鎖定或用戶2發生超時) – deceze 2013-02-11 18:28:13

+0

感謝您的回覆。 – Peter 2013-02-11 18:44:44

1

你不應該在意這一點。
Id是一個唯一創建的標識符,沒有特殊含義
無論何時您對此標識符賦予特殊含義,您都將面臨災難。

+0

我知道,但這只是一個「很好的接觸」,讓一切排序整齊:) – Peter 2013-02-11 18:43:35