子查询结果可以过时吗?

时间:2017-01-12 04:08:37

标签: mysql auto-increment

我有一个查询,它使用子查询来确定要插入的行的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
)

1 个答案:

答案 0 :(得分:1)

如果您这样做只是为了设置ID之间的间隔,您应该使用:

SET @@auto_increment_increment=1000;

这将确保后续的自动增量值相差1000个数字。这是引擎级别的强制执行,因此您不必担心竞争条件。

更多信息: https://dev.mysql.com/doc/refman/5.6/en/replication-options-master.html#sysvar_auto_increment_increment

相关问题