2011-10-12 100 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

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