LAST_INSERT_ID()返回多行0?

Gre*_*lty 1 mysql sql database debugging

目前在phpMyAdmin工作:

order 表格结构:

OrderID     int(11)  auto_increment
CustomerID  varchar(50)
BillAddr    varchar(200)
ShipAddr    varchar(200)
Date            date
Total           double
Run Code Online (Sandbox Code Playgroud)

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

SQL:

SELECT LAST_INSERT_ID() FROM `order`
Run Code Online (Sandbox Code Playgroud)

结果:

LAST_INSERT_ID()
0
0
0
0
Run Code Online (Sandbox Code Playgroud)

我期待第四行OrderID- 只有一个数字,但在phpMyAdmin中每行得到一个0.

ibl*_*lue 6

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

INSERT INTO table VALUES('a', 'b', 'c');
Run Code Online (Sandbox Code Playgroud)

它将返回最后一个id(新主键具有的值).

SELECT LAST_INSERT_ID();
=> 123 
Run Code Online (Sandbox Code Playgroud)

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

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

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

SELECT id FROM table ORDER BY id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

  • 最后一个查询返回最大的插入ID - 而不是最新的.它并不局限于会议.这两种方法之间存在非常重要的语义差异.(我不是说iblue的代码是错误的 - 只是假设它与last_insert_id()相同是非常危险的) (6认同)