我们非常沮丧地在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