MySQL:在插入时基于MAX()子查询安全地自动增加MySQL字段

时间:2016-04-21 11:18:43

标签: mysql

我有以下表格结构。

CREATE TABLE `comments` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `articleid` int(11) NOT NULL DEFAULT '0',
 `sequence` int(11) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 UNIQUE KEY `comments4` (`articleid`) USING BTREE,
 UNIQUE KEY `comments5` (`articleid`, `sequence`) USING BTREE,
 KEY `comments3` (`articleid`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

当我插入数据时,sequence应根据MAX值自动增量。一切正常,直到两个parellel请求命中导致MySQL错误

  

SQLSTATE [23000]:完整性约束违规:1062重复条目   '2137092-3'代表关键'comments5'

我尝试使用带子查询的事务来解决这个问题,但结果却导致了大量的性能问题。

我还能如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

将选择Max().....和插入物放入TRANSACTION中。 Max(9在INNODB中总是一个问题