last_insert_id的实现

时间:2015-01-09 15:28:21

标签: php mysql

从特定表中获取最后一个插入ID的最佳方法是什么?我看到至少有四种不同的方法:

1. SELECT LAST_INSERT_ID()
2. mysql_insert_id()
3. SELECT max(id) FROM table
4. SELECT id FROM table ORDER BY id DESC LIMIT 1

第一种方法胜过第二种方法,因为如果id具有bigint类型,则第二种方法返回0。但问题是 - 我不能确定我得到的id来自我想要的表,因为LAST_INSERT_ID()返回整个数据库中的最后一个id。第三种和第四种方法在大型桌子上并不是那么快,但第四种方法似乎在速度方面超过了第三种方法。我想知道的是 - 你们,你们是如何在现实世界的项目中实现这一任务的。

1 个答案:

答案 0 :(得分:3)

3和4存在多个问题,例如

  • 他们不处理并发用户
  • 他们无法处理id id中的再生ID或其他类型的跳过
  • ids也可以翻身,而不是由他们处理

1和2接近同一件事。它们都是特定于连接的,因此应该可以很好地处理并发用户,并且具有上下文感知功能,以便您获得预期的结果。

如果你觉得mysql_insert_id对它支持的数据类型有一些缺点,你可以改用第一个。它应该具有相同的行为。