LAST_INSERT_ID()返回多行0?

时间:2012-07-02 23:09:44

标签: mysql sql database debugging

现在在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。

5 个答案:

答案 0 :(得分:6)

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

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

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

SELECT LAST_INSERT_ID();
=> 123 

有关详细信息,请查看the manual

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

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

SELECT id FROM table ORDER BY id DESC LIMIT 1;

答案 1 :(得分:3)

the manual中所述:

  

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

mysql> SELECT LAST_INSERT_ID();
        -> 195

答案 2 :(得分:1)

这样做:

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

通过指示表,对所述表中的每一行重复select语句。

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

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