gpt4 book ai didi

php - 为自动增量字段创建唯一的用户哈希

转载 作者:行者123 更新时间:2023-11-29 07:58:07 25 4
gpt4 key购买 nike

所以在这个应用程序中,我们有一个 user id这很简单auto-increment primary key 。由于我们不想在客户端公开这一点,因此我们将使用 simple hash ( encryption 并不重要,只有 obfuscation )。

因此,当用户添加到表中时,我们会执行 uniqid(). user_id 。这将保证user hashrandom足够了,永远unique

我的问题是,在插入记录时,我们不知道此时的用户 ID(不能假设 max(user_id) + 1 ),因为可能会提交插入。所以我们正在执行插入,然后获取last_insert_id then using that for the user_id`,它添加了一个额外的数据库查询。那么有没有更好的方法来做到这一点?

最佳答案

在实际答案之前有一些事情:使用 InnoDB 作为默认存储引擎的最新版本的 MySQL - 你总是想要一个整数 pk(或著名的 auto_increment)。原因主要是性能。有关更多信息,您可以研究 InnoDB 集群如何使用 PK 进行记录以及它为何如此重要。解决这个问题后,让我们考虑一下创建唯一代理键的选项。

选项 1

您可以使用 PHP 和从 MySQL 获取的信息(last_insert_id())自行计算,然后更新数据库。

优点:即使是新手程序员也很容易理解,生成的代理键很短。

缺点:对于并发访问来说非常糟糕,你可能会遇到冲突,并且你永远不想使用 PHP 来计算数据库所需的唯一索引。你不想要这个选项

选项 2

向您的查询提供 uniqid(),创建一个 AFTER INSERT 触发器,将 uniqid() 与 auto_increment 连接起来。

优点:易于理解,生成简短的代理键。

缺点:需要您创建触发器,实现直接从代码中看不到的魔法,这肯定会让在某个时候继承该项目的开发人员感到困惑 - 根据经验,我敢打赌这很糟糕事情将会发生

选项 3

使用通用唯一标识符或 UUID(也称为 GUID)。只需为您的查询提供 surrogate_key = UUID(),MySQL 就会完成剩下的工作。

优点:始终独特,无需魔法,易于理解。

缺点:没有,除非它占用 36 个字符这一事实让您烦恼。

您需要选项 3。

关于php - 为自动增量字段创建唯一的用户哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24574479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com