如果我有一堆插入到表中并执行select语句来获取最后一个id,那么select会等到所有插入完成吗?如果我使用MAX或last_insert_id会有什么不同吗?
现在我正在使用:
SELECT MAX(ID) as myid FROM MY_TABLE WHERE my_column = "my_condition";
答案 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