2011-10-12 97 views
0

如何从Mysql InnoDb获得未来的密钥?MySql InnoDb自动增量预取值

Oracle和Postgres都具有序列和nextval函数的概念。 Mysql似乎有点不同。

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

回答

0

对于InnoDB表,你可以这样做:

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

甲骨文和Postgres都有序列的概念和NEXTVAL功能。 Mysql似乎有点不同。

在MySQL中,你可以这样做是为了寻找下一个值 -

SELECT MAX(id) + 1 FROM table_name; 

但没有保证AUTO_INCREMENT作品以同样的方式。

+0

所以你说InnoDb没有安全的方法来产生一些独特的序列?事先必须有一些方法来获取密钥? –

+0

您可以在AUTO_INCREMENT字段中插入NULL。它会强制引擎本身生成新的'id'。 – Devart

+0

是的,但我想要重新使用其他外键的密钥,而不必在插入后执行一些不必要的操作。我正在使用批量插入,因此插入前我需要密钥。 –