说我有这个表。
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
可能会抛出错误?
默认情况下,InnoDB使用自动提交模式,所以每个查询都是一个单一的事务。所以它会自动进行必要的锁定,防止重复。