首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL表需要自动递增ID吗?

MySQL表需要自动递增ID吗?
EN

Stack Overflow用户
提问于 2015-09-03 20:06:05
回答 4查看 122关注 0票数 2

因此,在创建新表时,通常会有一个名为id的列设置为主表,并将其设置为自动增量。

在我正在进行的一个新项目中,对于每一行,我需要一个特定长度的唯一id,在本例中为15个字符。

那么我的问题是,用这个15个字符的数字id代替一个自动递增的id有问题吗?是否有使用自动递增号的技术原因?

我使用它生成I,因此,据我所知,它们肯定是唯一的:

代码语言:javascript
复制
$randNum = preg_replace('/[.:]/', '', time().$_SERVER['REMOTE_ADDR']).randomNumber(4)

function randomNumber($length) {
    $result = '';
    for($i = 0; $i < $length; $i++) {
        $result .= mt_rand(0, 9);
    }
    return $result;
}

更好的算法?

代码语言:javascript
复制
$randNum = round(microtime(true) * 1000).randomNumber(7)

function randomNumber($length) {
    $result = '';
    for($i = 0; $i < $length; $i++) {
        $result .= mt_rand(0, 9);
    }
    return $result;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-03 20:11:48

不,MySQL不需要有一个自动递增的ID列.但是,作为手册中注明,索引键对于良好的数据库设计是必不可少的。如果您正在手动生成ID,而不是使用自动增量,这很好,但请确保用于生成ID的算法总是生成唯一ID(这与您发布的算法不同)。

票数 4
EN

Stack Overflow用户

发布于 2015-09-03 20:10:04

是否有使用自动递增号的技术原因?

Auto Increment ID也称为synthetic key columns,它是由系统自动生成的,并确保它们是唯一的。使用自动ID作为primary key并不是强制性的。可以用自己的键值将列定义为主键,除非它们确保是唯一的。

对于每一行,我需要一个特定长度的唯一id,在本例中为15个字符。

在本例中,不要将其定义为AUTO INCREMENT,并将其定义为VARCHAR(15)列,例如,如果您正在填充应用程序中的数据,并且说它是一个.NET/C#应用程序,则可以使用GUID作为该事项的主键(OR)。

票数 2
EN

Stack Overflow用户

发布于 2015-09-03 20:10:11

表中不需要有一个自动递增的id。您可以使用您要创建的id作为主键。至于您的randomNumber()函数:我相信您知道,不能保证数字会有所不同,这只是一个非常好的机会。如果您想使用它,您应该添加一个检查,看看数据库中是否已经存在这个数字。

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

https://stackoverflow.com/questions/32384540

复制
相关文章

相似问题

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