【问题标题】:mysql_insert_id issue in concurrency data inserting并发数据插入中的mysql_insert_id问题
【发布时间】:2012-08-08 21:15:08
【问题描述】:

mysql_insert_id() 在竞争环境中的可靠性如何?我的意思是当多个用户同时插入数据时,这个函数是返回真实ID还是返回其他用户插入的数据ID?

表引擎是 MyISAM。

【问题讨论】:

    标签: mysql concurrency mysql-insert-id


    【解决方案1】:

    mysql_insert_id 完全是多用户安全的。它完全依赖于数据库连接,并且每个连接只能有一个用户....所以,根据您的问题,它返回 true id....

    来自MySql documentation

    生成的 ID 保存在服务器上的 每个连接的基础。这意味着返回的值 给定客户端的函数是生成的第一个 AUTO_INCREMENT 值 对于影响 AUTO_INCREMENT 列的最新语句 客户。此值不会受到其他客户端的影响,即使它们 生成自己的 AUTO_INCREMENT 值。这种行为确保 每个客户端都可以检索自己的 ID 而无需担心 其他客户端的活动,并且不需要锁或 交易。

    【讨论】:

      【解决方案2】:

      恕我直言,即使在多个用户插入时..它也会在您的程序执行中按顺序执行。

      来自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() 的值只受当前客户端连接内发出的语句影响,不受其他客户端发出的语句影响。"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多