MySQL UUID主键 - 由PHP或MySQL生成?

时间:2012-02-21 15:59:36

标签: php mysql random uuid lastinsertid

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

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

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

2 个答案:

答案 0 :(得分:12)

不,让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;

修改:该页面上有多种方法可生成不同类型的UUIDv4是伪随机的,但您可以使用其他版本或创建自己的UUID生成器。

答案 1 :(得分:0)

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

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

然后使用下面的

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