我有一個帶有自動遞增主鍵的表。我想插入一行,但返回其他內容爲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的返回值()可以簡化爲以下序列:
如果有一個AUTO_INCREMENT列,和自動生成的值是成功插入,返回第一個這樣的值。
如果在語句中發生LAST_INSERT_ID(expr),則返回expr,即使受影響的表中存在AUTO_INCREMENT列。
返回值因使用的語句而異。當一個INSERT語句之後調用:
- 如果表中的一個AUTO_INCREMENT列,並有成功插入到表中此列一些明確的值,返回最後一個明確的價值觀。
當插入後調用... ON DUPLICATE KEY UPDATE語句:如果表中的一個AUTO_INCREMENT列,並有一些明確的成功插入值或更新一些值
- ,返回最後一個插入或更新的值。
如果我正確地解釋點2.,我的查詢應該工作,應該返回50,而不是1,但它看起來像點1.先點2.
有沒有其他方式實現這一點,而無需運行多個查詢?
我知道正常使用'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
但無論如何,你的例子很有趣。不知道。 – user147133