【问题标题】:Problem with auto increment primary key (MySQL)自动增量主键问题(MySQL)
【发布时间】:2010-05-16 14:10:04
【问题描述】:

我有 2 个表,每个表都使用彼此的主键作为外键。两者的主键都设置为auto_increment。

问题是,当我尝试创建并进入其中一个表时,我不知道该条目的主键是什么,也无法弄清楚将什么作为外键放入另一个表中。我应该怎么办?我是否完全放弃 auto_increment 并为每个条目制作一个唯一标识符,以便我可以使用它来处理创建的条目?我正在使用 PHP,如果这相关的话。谢谢。

【问题讨论】:

    标签: php mysql primary-key auto-increment


    【解决方案1】:

    每个主要的数据库都提供了一种查找您刚刚插入的记录的 ID 的方法;否则,自动递增 ID 的想法不会很有用。

    在 MySQL 中,您可以使用mysql_insert_id()。查看PHP function of the same name 或它所环绕的MySQL function。

    【讨论】:

    • 但是如果在很短的时间内制作了很多插入,这不是一个问题吗?然后它会发送另一个条目的ID吗?谢谢。
    • 如果您要插入两条记录并且一条引用另一条记录,则必须确保它们紧随其后插入,或者记录第一条记录的 mysql_insert_id() 并存储它,如果您无法立即插入第二条记录。
    • mysql_insert_id() 将返回每个连接的最后一个插入 ID,因此如果您的站点上有大量流量并且执行了许多插入,每个连接都会获得自己的插入 ID,会有没问题。
    • 谢谢,正是我要问的问题! :)
    【解决方案2】:

    mysql_insert_id 可以为您提供自动增量主键的最后生成值的值。

    如果您正在使用 PDO(您应该这样做),则可以改用 PDO::lastInsertId()。这适用于 PDO 支持的所有数据库系统。

    【讨论】:

    • 以前从未使用过 PDO。有趣的是,PostgreSQL 有一个 RETURNING 关键字,看起来非常方便。
    【解决方案3】:

    您可以使用此函数:mysql_insert_id 以获取最后插入的 id

    【讨论】:

      【解决方案4】:

      在初始插入后,mysql_insert_id() 函数将返回自动递增的 id 值,以便您可以在下一次插入时使用它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        • 1970-01-01
        • 2012-05-16
        • 2011-07-16
        • 2012-12-14
        • 1970-01-01
        相关资源
        最近更新 更多