首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中创建一个更长的唯一自动增量列,第一行有更多的6个字符。

问在mysql中创建一个更长的唯一自动增量列,第一行有更多的6个字符。
EN

Stack Overflow用户
提问于 2013-12-27 08:33:26
回答 3查看 2.1K关注 0票数 1

一个自动增量颜色可以在mysql中创建,我是否可以在列上创建一个自动生成的数字,这个数字对所有行都是唯一的,并且随机数超过6个字符,并且是字母数字?

目前正在使用PHP。

代码语言:javascript
复制
function randomCode(){
    $alphabet = "8ABCDEFGIJKLMmNPQjhgkhjg";
    $Code = array();
    $alphaLength = strlen($alphabet) - 1;
    for ($i = 0; $i < 8; $i++){
        $n = rand(0, $alphaLength);
        $Code[] = $alphabet[$n];
        }
    return implode($Code);
    }

但问题是,我无法控制存储在数据库中的这些代码的唯一性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-27 08:39:47

实际上,您不能在MySQL中以本地方式这样做。这个DBMS不支持序列。唯一受支持的自动选项是普通的auto_increment --它通常是连续的(但是--是的,您可以对它做一些小的调整,但是,这对您的情况没有帮助)。因此,您无法通过MySQL实现您的目标,您将不得不在您的应用程序中处理这个问题。

如果您希望您的序列是随机的和唯一的-您可能需要查看uniqid()函数。它保证值将是唯一的-至于长度,它肯定会超过6个字符。对于更多的随机值,您可以与mt_rand()合并,例如:

代码语言:javascript
复制
$long_value  = uniqid(mt_rand(),1); //long string, length > 30
$short_value = uniqid(); //short string, length < 20
票数 1
EN

Stack Overflow用户

发布于 2013-12-27 08:42:20

尝试使用mysq UUID()

插入表

代码语言:javascript
复制
  INSERT INTO table (id, name) VALUES (UUID(), 'hello')

或者没有破折号

代码语言:javascript
复制
  INSERT INTO table (id, name) VALUES (REPLACE(UUID(), '-', ''), 'hello')
票数 1
EN

Stack Overflow用户

发布于 2013-12-27 08:56:49

MySQL自动增量列不能是字母数字.为了所有神圣的爱,不要使用UUID,除非你真正知道你在做什么。顺序键对于查询等来说要快得多,用随机密钥在db上进行维护是一件很痛苦的事。为了简单起见,我假设您可以处理整数到字母数字转换代码,并进行相应的操作:

这是我推荐给你的两种选择。

第一种选择:

假设您希望将键显示为字母数字,您可以始终作弊:只需显示一些转换代码,将INT转换为字母数字值(基本上将其从基数10更改为基数36,如果需要特殊字符的话,再加上更多),我更喜欢这样做,因为它将是最快的,并且会引起最少的头痛。如果您担心数据库的值会耗尽,请使用一个未签名的BIGINT,它的大小基本上是UUID的一半,但是对于查询来说应该更快。

第二种选择:

创建您自己的自动编号系统:创建另一个包含两个列的表,即表名和“最后输入的键”。您可以在每次插入时查询该表,以找到“最后输入的键”,然后增加“最后输入的键”,并更新自动编号表。这可能是缓慢与大量的插入,但让您完全控制自动编号。还可以让触发器填充该列,该触发器运行获得自动编号的过程。如果编程正确,它将几乎和内置的自动存贮器一样工作,问题是,您是否有时间,是否要花费精力编写该代码:)

编辑:刚刚再次注意到'display 6个字符‘->,这是一个显示问题,您可以始终使用lpad (lpad)使其成为6个字符,或者更改自动增量开始值(只需发送ID =某个值的INSERT语句)。

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

https://stackoverflow.com/questions/20797416

复制
相关文章

相似问题

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