【问题标题】:MySQL UUID primary key - generated by PHP or by MySQL?MySQL UUID 主键 - 由 PHP 或 MySQL 生成?
【发布时间】:2012-03-11 22:47:14
【问题描述】:

我的印象是,让 MySQL 通过 UUID() 生成主键会使该键在服务器之间具有唯一性,等等。

但是,there is no way to fetch the last inserted UUID,它要求每次插入时都执行一个额外的选择语句。

是否可以让 PHP 生成与 MySQL 生成的完全相同的UUID()

【问题讨论】:

    标签: php mysql random uuid lastinsertid


    【解决方案1】:

    不,PHP 不可能生成与 MySQL 完全相同的UUID(),因为它是一个(完全)随机数。

    听起来您的问题是您喜欢在 MySQL 中使用 UUID(),但不想执行额外的查询来确定新的 UUID 是什么。

    那么为什么不让 PHP 创建UUID 用作INSERT 查询中的主键呢? This comment on php.net 应该会告诉你如何做到这一点。

    使用这些示例函数:

    $uuid = UUID::v4();
    $sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');";
    echo "The UUID is: ". $uuid;
    

    编辑:该页面上有几种方法可以生成不同类型的UUIDs。 v4 是伪随机的,但您可以使用不同的版本或创建自己的 UUID 生成器。

    【讨论】:

    • 嗯,使用这种方法,我必须检查它是否是 MySQL 中的唯一 uuid,以及它是否在服务器之间是唯一的。似乎每种方式都需要额外的检查唯一性或数据提取?
    • 如果使用随机生成的 UUID,就不会出现这个问题。从统计数据来看,如果您在 100 年中每秒生成 10 亿 个 UUID,则只有 50% 的可能性是只有一个会发生冲突。 (来源:en.wikipedia.org/wiki/…)虽然您可能永远不会看到冲突,但在 MySQL 中将 UUID 作为主键并定期同步服务器仍然是明智之举。
    【解决方案2】:

    我尝试了第一步:$uuid = UUID::v4();,但它挂起了我的服务器,所以我想到了另一个想法,我尝试如下:

    从查询$sql1 = SELECT UUID() AS uuid ;获取数据
    然后存储在变量$uuid

    然后在下面使用

    $sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');";
    echo "The UUID is: ". $uuid;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2011-10-06
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多