当值为UNIQUE时,INSERT INTO ... SELECT值+1是否需要锁?

问题描述 投票:0回答:1

说我有这个表。

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `number` int(10) UNSIGNED NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

如果我插入这样的数据,我是否需要某种锁。

INSERT INTO test(number)
SELECT COALESCE(MAX(number), 0) + 1 FROM test;

换句话说,如果我把这条语句并行执行了很多次 我是否应该担心同样的语句会被插入到表里?number 可以插入两次吗?我显然会创建一个 UNIQUE 键(实际上是一个复合键,这就是为什么经典的 AUTO INCREMENT 功能不符合我的需求),但在这种情况下,我是否应该担心一个 UNIQUE CONSTRAINT 可能会抛出错误?

mysql sql sql-insert
1个回答
1
投票

默认情况下,InnoDB使用自动提交模式,所以每个查询都是一个单一的事务。所以它会自动进行必要的锁定,防止重复。

© www.soinside.com 2019 - 2024. All rights reserved.