【问题标题】:MySQL - changing AUTO_INCREMENT value on regular intervalMySQL - 定期更改 AUTO_INCREMENT 值
【发布时间】:2021-12-04 02:51:00
【问题描述】:

我们定期(每 10 分钟)执行以下操作,以分散自动递增列值,并使其稍微不可猜测。这按预期工作。但是,我想知道这种方法的缺点是否包括性能。任何其他更好的方法来做到这一点。我们无法随机化该值,因为我们需要列随时间递增。

alter table products AUTO_INCREMENT = 10000;

10 分钟后

alter table products AUTO_INCREMENT = 11000;

10 分钟后

alter table products AUTO_INCREMENT = 12000;

等等

谢谢

【问题讨论】:

  • 你必须创建一个 cronjob 来运行每个间隔并在所述间隔更新,我猜?
  • 没错。一个 cronjob,它获取列值的 max() 并添加一些偏移量。
  • @Jim 为什么内部 ID 不在序列中是个问题?也许你根本不想暴露 ID 值。

标签: mysql auto-increment


【解决方案1】:

改为更改id,就像对每个INSERT 一样。

INSERT INTO t  (id, ...)
    VALUES ( ( SELECT 
                 MAX(id) + CEIL(RAND() * 100)
                 FROM t
             ),
            ...)

一旦你这样做了,就不需要AUTO_INCREMENT

【讨论】:

  • 这种方法会因多线程而失败!两个线程可能会尝试插入相同的值并且会失败。
  • 在事务之外但带有autocommit=ON 的单个语句本身就是一个事务。如果您觉得更安全,请将其设置为 2 个语句,使用 FOR UPDATE,并进行显式事务。
  • 与我使用的 auto_increment 选项相比,它有多好?我觉得两笔交易会使它变得不必要的复杂和低效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2011-01-11
  • 2011-10-28
  • 2021-05-07
  • 2020-03-21
  • 1970-01-01
  • 2021-03-14
相关资源
最近更新 更多