【问题标题】:PHP mysql_insert_id() for MySQL UUID() primary keys?用于 MySQL UUID() 主键的 PHP mysql_insert_id()?
【发布时间】:2012-02-21 14:29:50
【问题描述】:

是否有相当于 PHP mysql_insert_id 的方法来获取最后插入的 UUID() 主键? (我总是得到 0。它适用于 auto_inc 整数)

【问题讨论】:

  • 不幸的是,我认为没有。另外,请停止使用 mysql_* 函数并改用 mysqli_* 函数或 PDO 对象。
  • 好吧,除了打破对旧版 php 安装的支持... PDO 中有什么东西吗?
  • 我们在说什么“遗产”? Mysqli 得到了很好的支持。

标签: php mysql primary-key uuid mysql-insert-id


【解决方案1】:

不,last_insert_id() 仅检索最后生成的 auto_increment 字段。您必须先执行 select uuid(),然后使用该 uuid 执行插入操作。

但是,请注意,不能保证 uuid 是唯一的 - 它们根本不太可能发生冲突。如果您确实需要唯一性,请使用 auto_increment - 它们永远不会在任何单个表中重复使用。

【讨论】:

  • 我以为当你分片到不同的服务器时 auto_increment 会失败,因此使用 UUID 的?
  • @ina 是的,如果您切换分区,分片(无论是否到不同的服务器)都可能导致 auto_increment 失败。但是,当您对表进行分区(“分片”)时,您的 PK 有效地变为 auto_increment 值加上您要分区的任何列。
  • 我仍在试图理解为什么许多系统使用 UUID 作为用户的主 ID。我原以为这是因为他们假设数据库可以跨不同的服务器扩展,而 UUID 中的 mac-address 有助于确定数据在哪个服务器上。但是,如果一个 id 保证是唯一的并且可以扩展,为什么要使用 UUID。
【解决方案2】:

我发现这个非常简短的解决方案:

set @id=UUID();
insert into <table>(<col1>,<col2>) values (@id,'another value');
select @id;

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多