2013-01-11 17 views
0

我的數據庫有,使用auto_increment時,如何獲取新行的id?

mysql> describe students; 
+-------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+-------------+------+-----+---------+----------------+ 
| id | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(50) | YES |  | NULL |    | 
+-------+-------------+------+-----+---------+----------------+ 

而且我想插入2名學生 - 但我想知道thier標識立即

mysql> insert into students values (null, 'tom'), (null, 'larry'); 

我想,如果插入實際返回的結果集的ID ...又名...

mysql> select id from (insert into students values (null, 'tom'), (null, 'larry')); 

Humm?

+0

我不認爲你能夠同時執行兩個插入並返回兩個新ID – Phil

回答

3

您可以使用LAST_INSERT_ID()函數獲取該批次的第一個AUTO INCREMENT值,然後MAX以獲得最大值。

LAST_INSERT_ID()(無參數)表示返回這是用於AUTO_INCREMENT柱通過了最近執行的INSERT語句來影響這樣的列設置的第一自動生成的值的BIGINT(64位)的值。

Reference

> INSERT INTO students VALUES (NULL, 'tom'), (NULL, 'larry'); 

> SELECT LAST_INSERT_ID() FROM students LIMI 1 
| LAST_INSERT_ID() | 
-------------------- 
|    1 |
> SELECT MAX(id) FROM students 
| MAX(ID) | 
----------- 
|  2 |
> INSERT INTO students VALUES (NULL, 'billy'), (NULL, 'jane'), (NULL, 'fred'); 

> SELECT LAST_INSERT_ID() FROM students LIMIT 1 
| LAST_INSERT_ID() | 
-------------------- 
|    3 |
> SELECT MAX(id) FROM students 
| MAX(ID) | 
----------- 
|  5 |
+0

這看起來很有趣。但它不是一個單獨的交易......所以如果其他人也正在增加批次的學生,我可能會得到錯誤的ID範圍(我可以通過檢查students_inserting!= max - last + 1來檢測) –

+1

@BobHerrmann至少, LAST_INSERT_ID'應該可以工作。 *生成的ID在每個連接的基礎上保存在服務器中*這意味着執行該「INSERT」的客戶端將獲得正確的值。讓我做一些關於獲得最大值的進一步研究。 – Kermit

相關問題