首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成MySQL唯一字段的唯一值

问生成MySQL唯一字段的唯一值
EN

Stack Overflow用户
提问于 2015-02-03 09:34:13
回答 5查看 2.1K关注 0票数 2

例如,当用户注册到我的网站时,我创建一个长度为40的唯一字符串,并将其插入数据库。然后,我们向新注册的用户发送一封电子邮件,其中包含一个URL形式的唯一字符串,这一切都很好。但是,如何创建和插入这个注册实体,以确保具有唯一属性的字段实际上是唯一的?

我目前的做法如下:

代码语言:javascript
复制
$key = '';
$repeat = true;
while ($repeat) {
    $key = generate_hash(40);
    $is_unique = (count($model->get_by_key($key)) === 0) ? true : false;
    $repeat = ($is_unique) ? false : true;
}
// At this point I know the key is unique and can insert it...

我对这段代码不满意,因为我试图在一般情况下避免while循环。有没有更好的方法来达到我在这里所做的?

底线是包含这些键的MySQL字段具有唯一的属性,我需要知道在插入这些键时不会发生唯一的违规行为。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-03 10:44:03

好吧,基本上你有两种方法。

  1. 让DB处理这个问题,并使用UUID()来创建您可以在电子邮件中使用的唯一标识符。 根据您的MySQL版本,您有一些选项: A.和MySQL 4.1及以上版本您可以直接使用该函数并插入到: 插入table_name (unique_id,field1,field2)值(UUID(),"smth","smth") B.和MySQL 5.0,您可以创建触发器并在插入时自动填充唯一字段: 为每一行设置unique_id = UUID()在table_name上插入之前创建触发器NEW.unique_id ()
  2. 您可以通过编程检查生成的id是否确实是唯一的。您现在所做的相同,但是您可以重构代码,如下所示: $key = generate_hash(40);while (count($model->get_by_key( $key ){ $key = generate_hash(40);}//在$key中有一个惟一的id
票数 4
EN

Stack Overflow用户

发布于 2015-02-03 09:51:16

在that.In php的几乎每种语言中都有独特的id函数,

代码语言:javascript
复制
echo uniqid();
票数 0
EN

Stack Overflow用户

发布于 2015-02-03 10:01:25

您可以生成256^40个不同的40个字符字符串.太阳会在你产生两个相同的字符串之前爆炸。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28295545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档