我试图使一些MSSQL代码也可以在MYSQL上运行,而我只是碰到了这个地雷。谷歌表示,通常的方法是简单地进行插入,然后选择last_insert_ID()来查找所写的内容。
但是,这在多用户环境中并不令我感到安全。那里有一个狭窄的窗口,另一个用户可以在其中插入一些东西并导致错误的返回值。如何 安全 插入并获取插入记录的密钥?
https://dev.mysql.com/doc/refman/5.5/zh-CN/information- functions.html#function_last-insert- id:
生成的ID在 每个连接 的服务器中维护。这意味着函数返回给定客户端的值 是为该客户端 影响AUTO_INCREMENT列 的 最新语句生成的第一个AUTO_INCREMENT值。即使其他客户端生成自己的AUTO_INCREMENT值,该值也不会受到其他客户端的影响。此行为可确保每个客户端都可以检索自己的ID,而不必担心其他客户端的活动,也不需要锁或事务。
因此,除非您为多个用户执行的插入操作恰巧是在同一数据库连接上完成的,否则您不必担心。