2017-04-07 33 views
0

我有一個帶有自動遞增主鍵的表。我想插入一行,但返回其他內容爲LAST_INSERT_ID。閱讀手冊,我認爲這是可能的:使用auto_increment插入到表中,但將其他列作爲LAST_INSERT_ID返回

CREATE TABLE test (
    id BIGINT AUTO_INCREMENT PRIMARY KEY, 
    number BIGINT 
); 

INSERT INTO test (number) VALUES (LAST_INSERT_ID(50)); 

SELECT LAST_INSERT_ID(); 

我想這個返回50,但它返回1代替。

documentation指出:

mysql_insert_id的返回值()可以簡化爲以下序列:

  1. 如果有一個AUTO_INCREMENT列,和自動生成的值是成功插入,返回第一個這樣的值。

  2. 如果在語句中發生LAST_INSERT_ID(expr),則返回expr,即使受影響的表中存在AUTO_INCREMENT列。

  3. 返回值因使用的語句而異。當一個INSERT語句之後調用:

    • 如果表中的一個AUTO_INCREMENT列,並有成功插入到表中此列一些明確的值,返回最後一個明確的價值觀。

    當插入後調用... ON DUPLICATE KEY UPDATE語句:如果表中的一個AUTO_INCREMENT列,並有一些明確的成功插入值或更新一些值

    • ,返回最後一個插入或更新的值。

如果我正確地解釋點2.,我的查詢應該工作,應該返回50,而不是1,但它看起來像點1.先點2.

有沒有其他方式實現這一點,而無需運行多個查詢?

回答

0

LAST_INSERT_ID() - 最後INSERT
(成功插入一個AUTO_INCREMENT列自動生成的值)AUTOINCREMENT列的值,
它是從this頁。

這意味着你必須使用此功能是這樣的:

CREATE TABLE test (
    id BIGINT AUTO_INCREMENT PRIMARY KEY, 
    number BIGINT 
); 

INSERT INTO test (number) VALUES (200); 

SELECT LAST_INSERT_ID(); 
+------------------+ 
| LAST_INSERT_ID() | 
+------------------+ 
|    1 | 
+------------------+ 

INSERT INTO test (number) VALUES (100); 

SELECT LAST_INSERT_ID(); 
+------------------+ 
| LAST_INSERT_ID() | 
+------------------+ 
|    2 | 
+------------------+ 

但是:

INSERT INTO test VALUES (50, 50); 

SELECT LAST_INSERT_ID(); 
+------------------+ 
| LAST_INSERT_ID() | 
+------------------+ 
|    2 | 
+------------------+ 

select * from test; 
+----+--------+ 
| id | number | 
+----+--------+ 
| 1 | 200 | 
| 2 | 100 | 
| 50 |  50 | 
+----+--------+ 

這是因爲標識50不是由MySQL的產生......

+0

我知道正常使用'LAST_INSERT_ID()'。但是我使用'LAST_INSERT_ID(expr)',它是一個返回'expr' _的函數,並且同時將當前會話的last_insert_id設置爲'expr'_。通常的例子是:'UPDATE表SET數字= LAST_INSERT_ID(數字+ 1);''增加'數字'並且同時返回值爲'last_insert_id'。 請參閱:https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id – user147133

+0

但無論如何,你的例子很有趣。不知道。 – user147133

相關問題