【发布时间】:2012-08-08 21:15:08
【问题描述】:
mysql_insert_id() 在竞争环境中的可靠性如何?我的意思是当多个用户同时插入数据时,这个函数是返回真实ID还是返回其他用户插入的数据ID?
表引擎是 MyISAM。
【问题讨论】:
标签: mysql concurrency mysql-insert-id
mysql_insert_id() 在竞争环境中的可靠性如何?我的意思是当多个用户同时插入数据时,这个函数是返回真实ID还是返回其他用户插入的数据ID?
表引擎是 MyISAM。
【问题讨论】:
标签: mysql concurrency mysql-insert-id
mysql_insert_id 完全是多用户安全的。它完全依赖于数据库连接,并且每个连接只能有一个用户....所以,根据您的问题,它返回 true id....
生成的 ID 保存在服务器上的 每个连接的基础。这意味着返回的值 给定客户端的函数是生成的第一个 AUTO_INCREMENT 值 对于影响 AUTO_INCREMENT 列的最新语句 客户。此值不会受到其他客户端的影响,即使它们 生成自己的 AUTO_INCREMENT 值。这种行为确保 每个客户端都可以检索自己的 ID 而无需担心 其他客户端的活动,并且不需要锁或 交易。
【讨论】:
恕我直言,即使在多个用户插入时..它也会在您的程序执行中按顺序执行。
来自php.net
“mysql_insert_id() 作用于最后执行的查询,确保在生成值的查询之后立即调用 mysql_insert_id()。”
还有
不鼓励使用此扩展程序。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。此功能的替代方案包括:
mysqli_insert_id()
PDO::lastInsertId()
您也可以查看此link from dev.mysql,其中指出
"mysql_insert_id() 的值只受当前客户端连接内发出的语句影响,不受其他客户端发出的语句影响。"
【讨论】: