当我对INSERT具有一AUTO_INCREMENT列的表执行单行时,我想使用该LAST_INSERT_ID()函数返回AUTO_INCREMENT为该行存储的新'ed 值。
许多 Microsoft SQL Server 开发人员和管理员无疑都知道 SQL Server(SCOPE_IDENTITY和@@IDENTITY)中的等效功能并非没有问题。
我知道 MySQL 文档状态:
生成的 ID 基于每个连接在服务器中维护。这意味着函数返回给给定客户端的
AUTO_INCREMENT值是为该客户端影响AUTO_INCREMENT列的最新语句生成的第一个值。即使其他客户端生成AUTO_INCREMENT自己的值,该值也不会受到其他客户端的影响。此行为可确保每个客户端都可以检索自己的 ID,而无需关心其他客户端的活动,也无需锁定或事务。
甚至说:
同时使用来自多个客户端的
LAST_INSERT_ID()和AUTO_INCREMENT列是完全有效的。
是否存在任何可能导致LAST_INSERT_ID()不返回正确值的已知风险或场景?
我在 CentOS 5.5 x64 和 Fedora 16 x64 以及 InnoDB 引擎上使用 MySQL 5.5。