【问题标题】:MySql InnoDb auto-increment pre-fetching valuesMySql InnoDb 自动递增预取值
【发布时间】:2011-12-06 02:08:52
【问题描述】:

如何从 Mysql InnoDb 获取未来的密钥?

Oracle 和 Postgres 都具有序列的概念和 nextval 函数。 mysql好像有点不一样。

是否有一些简单的 sql 语句可以为某个自增字段提取可能 1000 个未来键,并确保没有其他事务可以同时或将来任何时间提取这些值?

【问题讨论】:

    标签: mysql database innodb auto-increment


    【解决方案1】:

    对于 InnoDb 表,您可以这样做:

    • 开始交易。
    • 插入 1000 条记录。
    • 提交事务。

    Oracle 和 Postgres 都有序列的概念和 nextval 函数。 mysql好像有点不一样。

    在 MySQL 中,您可以这样做来查找下一个值 -

    SELECT MAX(id) + 1 FROM table_name;
    

    但不能保证 AUTO_INCREMENT 的工作方式相同。

    【讨论】:

    • 所以你是说 InnoDb 没有安全的方法来产生一些独特的序列?一定有办法提前拿到钥匙?
    • 您可以在 AUTO_INCREMENT 字段中插入 NULL。它将强制引擎自己生成新的id
    • 是的,但我想重新使用其他外键的键,而不必在插入后进行一些 akward 提取。我正在使用批量插入,因此在插入之前我需要密钥。
    • 你可以得到 MAX(id) + 1,并用新的 id(+1) 插入新记录。
    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 2023-03-30
    • 2011-03-18
    • 1970-01-01
    • 2016-11-15
    • 2013-12-11
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多