我有一个带有自动递增主键的表。我想在其中插入一行,但返回其他内容为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。
mysql_insert_id()的返回值可以简化为以下顺序:
如果有AUTO_INCREMENT列,并且已成功插入自动生成的值,则返回第一个这样的值。
如果语句中出现LAST_INSERT_ID(expr),则返回expr,即使受影响的表中有AUTO_INCREMENT列。
- 醇>
返回值因使用的语句而异。在INSERT语句之后调用时:
- 如果表中有AUTO_INCREMENT列,并且此列的某些显式值已成功插入表中,则返回最后一个显式值。
在INSERT ... ON DUPLICATE KEY UPDATE语句后调用:
- 如果表中有AUTO_INCREMENT列,并且有一些显式成功插入的值或某些更新的值,则返回最后插入或更新的值。
如果我正确地解释了 2。,我的查询应该有效,应该返回50而不是1.但它看起来像点 1。在点 2 的
有没有其他方法可以实现这一点而无需运行多个查询?
答案 0 :(得分:0)
LAST_INSERT_ID()
- 最后一次INSERT的AUTOINCREMENT列的值
(为AUTO_INCREMENT列成功插入的自动生成的值),
它来自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 |
+----+--------+
因为id 50不是由mysql生成的......