我有一个查询,它使用子查询来确定要插入的行的ID。目标是将每个新行增加到 1000 的下一个倍数,从而允许ID之间存在大量差距。子查询返回的id是否可能已被另一个并发进程占用?或者这个子查询是否保证生成一个唯一的id,好像它是自动增量一样?
INSERT INTO `table`
SET id = (
SELECT x.max_id
FROM (
SELECT MAX(id) + 1000 as max_id
FROM `table`
WHERE id LIKE '%000'
) as x
)
答案 0 :(得分:1)
如果您这样做只是为了设置ID之间的间隔,您应该使用:
SET @@auto_increment_increment=1000;
这将确保后续的自动增量值相差1000个数字。这是引擎级别的强制执行,因此您不必担心竞争条件。