mysql - 始终从表中获取MAX id

时间:2015-05-26 11:18:27

标签: php mysql

如果我有一堆插入到表中并执行select语句来获取最后一个id,那么select会等到所有插入完成吗?如果我使用MAX或last_insert_id会有什么不同吗?

现在我正在使用:

SELECT MAX(ID) as myid FROM MY_TABLE WHERE my_column = "my_condition";

2 个答案:

答案 0 :(得分:2)

  

select会等到所有插入完成吗?

不。为什么会这样?如果插入查询是在SELECT查询之前发出的并且它是MyISAM表,那么是的,您将获得最后一次插入的id。这样的查询被序列化是大多数人使用InnoDB for OLTP的原因。

  

如果我使用MAX或last_insert_id会有什么不同吗?

是。 last_insert_id将返回您的会话生成的最后一个id,而MAX(id)将返回运行查询之前由任何会话分配的最大整数 - auto_increment整数不会全部返回单调增加。

除非你确切地知道自己在做什么,并故意做一些非常奇怪的事情,否则last_insert_id会给你你正在寻找的答案,并且会更有效率。

答案 1 :(得分:0)

如果使用MAX,您将始终获得数据库中最大的数字。这就像使用AUTO_INCREMENT。

当您使用“last_insert_id”时,您会获得最后一个插入ID,因此如果您在ID 4中插入了一些内容,但是您的最大ID为10,则必须检查是否介于4和10之间。

我建议您使用“MAX”或正确配置数据库中的AUTO_INCREMENT