3

现在在 phpMyAdmin 中工作:

order表结构:

OrderID     int(11)  auto_increment
CustomerID  varchar(50)
BillAddr    varchar(200)
ShipAddr    varchar(200)
Date            date
Total           double

该表目前有 4 行数据,具有不同的 OrderID。

SQL:

SELECT LAST_INSERT_ID() FROM `order`

结果:

LAST_INSERT_ID()
0
0
0
0

我期待第四行OrderID- 只有一个数字,但 phpMyAdmin 中的每一行都为 0。

4

5 回答 5

7

LAST_INSERT_ID()返回最后插入行的 id 并且不绑定到任何表。因此,如果您创建一个新行:

INSERT INTO table VALUES('a', 'b', 'c');

它将返回最后一个 id(无论新主键具有什么值)。

SELECT LAST_INSERT_ID();
=> 123 

有关详细信息,请查看手册

LAST_INSERT_ID()(不带参数)返回一个 BIGINT(64 位)值,表示由最近执行的 INSERT 语句为 AUTO_INCREMENT 列设置的第一个自动生成的值,以影响此类列。例如,插入生成 AUTO_INCREMENT 值的行后,您可以像这样获取值:

如果您只想获取表中的最后一个 ID,您可以这样做:

SELECT id FROM table ORDER BY id DESC LIMIT 1;
于 2012-07-02T23:12:20.473 回答
3

手册所述:

LAST_INSERT_ID()(不带参数)返回一个BIGINT(64 位)值,该值表示由最近执行的语句为列设置的第一个自动生成的值,以影响这样的列。例如,插入产生值的行后,可以这样获取值:AUTO_INCREMENT INSERTAUTO_INCREMENT

mysql> SELECT LAST_INSERT_ID(); 
        -> 195
于 2012-07-02T23:15:06.523 回答
1

像这样做:

INSERT INTO `one`(`id`, `name`) VALUES (NULL,'shivam');
select last_insert_id();

插入后不执行其他查询,它们应该一起执行

于 2012-10-12T09:04:42.857 回答
0

我有同样的问题,解决方案是同时进行查询。换句话说,第一个查询和第二个(last_insert_id)查询应该同时执行。不作为两种不同的执行方式。

于 2013-05-01T15:50:11.087 回答
0

通过指示一个表,您对所述表中的每一行重复选择语句。

除了重复相同的值之外,它不会影响您的查询结果。

如果在 phpmyadmin 中运行,您可能需要检查 Persistent Connections 是否设置为 TRUE,否则您将始终收到 0 作为 LAST_INSERT_ID() 的结果。

于 2013-11-18T14:37:48.820 回答