PDO::lastInsertId()是否返回指定表最新ID?并发场景下是否会返回错误ID?
PDO::lastInsertId()常见问题解答 1. 返回值的范围
PDO::lastInsertId()返回的是当前数据库连接会话内,最近一次插入操作生成的自增ID,既不是全局全库的最新自增ID,也不是某张表的全局最新ID,和其他连接的操作完全无关。
- 不传入参数调用时,主流数据库驱动(MySQL、MariaDB等)会直接返回当前连接最后一次插入生成的自增ID,不绑定具体表;
- 传入表名参数调用时,只有部分数据库驱动支持返回对应表的最新自增ID,该特性不具备跨数据库兼容性,不建议依赖。
2. 并发场景下的可靠性
并发场景下不会出现ID返回混淆的问题,这个方法的返回值是会话级隔离的:
- 每个用户的请求对应独立的数据库连接会话,不同会话的插入操作互不干扰,每个用户拿到的永远是自己本次插入生成的自增ID;
- 只有在同一个数据库连接内连续执行多次插入操作时,
lastInsertId()才会覆盖之前的ID,只返回最后一次插入的结果。
内容的提问来源于stack exchange,提问作者Kasun Jalitha
相关产品推荐
相关产品推荐

