MySQL表是否需要自动递增ID?

时间:2015-09-03 20:06:05

标签: php mysql

通常,当我创建新表时,我会将一个名为id的列设置为primary,并将其设置为自动递增。

在我正在处理的新项目中,对于每一行,我需要一个特定长度的唯一ID,在这种情况下需要15个字符。

所以我的问题是,使用这个15个字符的数字ID代替自动递增ID是否存在问题?是否有使用自动递增数字的技术原因?

我用这个来生成ID,所以据我所知,它们是唯一的:

$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;
}

更好的算法?

$randNum = round(microtime(true) * 1000).randomNumber(7)

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

4 个答案:

答案 0 :(得分:4)

不,MySQL不要求具有自动递增ID列。但是,作为noted in the manual,索引键对于良好的数据库设计至关重要。如果你手动生成ID而不是使用自动增量,那很好,但要确保用于生成ID 始终的算法生成唯一ID(与您发布的算法不同) )。

答案 1 :(得分:2)

  

是否存在使用自动递增数字的技术原因?

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

  

对于每一行,我需要一个特定长度的唯一ID,其中包含15个字符   这种情况。

在这种情况下,请不要将其定义为AUTO INCREMENT并将其设为VARCHAR(15)列,例如,如果要从应用程序填充数据并说例如它是{{1}在应用程序中,您可以使用.NET/C#作为主键(或其他一些关键字)。

答案 2 :(得分:0)

您的表格中无需自动增加ID。您可以使用您创建的ID作为主键。至于你的GUID功能:我相信你知道,不能保证数字不同,只是一个非常好的机会。如果要使用它,则应添加一个检查以查看数据库中是否存在该数字

答案 3 :(得分:0)

通常,数据库中的每个表都应该有一个主键。它可以是自动递增的id列,也可以是数据中自然出现的唯一标识符,或者是生成唯一标识符的其他方法(如guid)

MySQL根本不需要主键,但省略一个通常是非常坏主意。