我们无意中有一个同时具有INSERT IGNORE和ON DUPLICATE KEY UPDATE子句的查询(在事务中)。现在我们考虑它,它没有意义。第一个子句告诉引擎扔掉行,第二个子句告诉引擎更新行。
我们的问题是我们似乎相信这种类型的查询会导致JDBC锁定问题,特别是:"超过锁定等待超时;尝试重新启动事务"。当我们拿出INSERT IGNORE时,这个问题似乎一起消失了(连续4次连续失败后)。
你能相信这会导致锁定问题吗?当两个条款都存在时,引擎决定选择什么?
我们拥有最新的Java 7和J-Connector for MySQL。
INSERT IGNORE INTO comp.table
(`id`,`type`)
VALUES
(1,2)
ON DUPLICATE KEY UPDATE
id=1,type=2;