我們非常沮喪地在MySQL中導致死鎖。這不是因爲超過了鎖定超時,因爲它們確實發生時會立即發生死鎖。下面是是在2個獨立的線程(從連接池2個獨立的連接)執行時產生死鎖的SQL代碼:在MySQL中獲取死鎖
UPDATE Sequences SET Counter = LAST_INSERT_ID(Counter + 1) WHERE Sequence IS NULL
序列表中有2列:序列和反
的LAST_INSERT_ID讓我們到retrieve this updated counter value as per MySQL's recommendation。這對我們來說非常合適,但是我們遇到了這些僵局!我們爲什麼得到它們,我們如何避免它們?
非常感謝您的幫助。
編輯:這是所有事務(因爲我使用Hibernate而需要)和AUTO_INCREMENT在這裏沒有意義。我應該更清楚。序列表包含許多序列(在我們的案例中約有1億個序列)。我需要增加一個計數器並檢索該值。 AUTO_INCREMENT在所有這一切中都沒有任何作用,這與Ids或PRIMARY KEY無關。
請問您可以發佈'SHOW CREATE TABLE Sequences'的輸出嗎? – Quassnoi 2010-05-26 23:47:21
CREATE TABLE'sequences'( 'Id' BIGINT(20)NOT NULL AUTO_INCREMENT, 'Sequence' VARBINARY(1005)DEFAULT NULL, 'Counter' INT(11)DEFAULT '0', PRIMARY KEY('Id' ), UNIQUE KEY'Sequences_Constraint'('Sequence'(104)) )ENGINE = InnoDB AUTO_INCREMENT = 134 DEFAULT CHARSET = utf8 – 2010-05-27 00:59:59