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

ina*_*ina 8 php mysql random uuid lastinsertid

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

但是,无法获取最后插入的UUID,这需要每次插入时都执行额外的select语句.

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

Col*_*ell 13

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

听起来你的问题是你喜欢UUID()在MySQL中使用但不想执行额外的查询来弄清楚新的UUID是什么.

那么为什么不让PHP创建UUID用作INSERT查询中的主键? 这个关于php.net的评论应该告诉你如何做到这一点.

使用这些示例函数:

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

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

  • 如果使用随机生成的UUID,则不会出现此问题。从统计上讲,如果您生成** 10亿个** UUID,**连续100年**每秒,**只有**个**相撞的可能性只有50%。(来源:http://zh.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates)尽管您可能永远不会看到冲突,但是将UUID设为MySQL中的主键并定期同步服务器仍然是明智的。 (3认同)