我有一个带有自动递增主键的表。我想插入一行,但返回其他内容为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