因此,在创建新表时,通常会有一个名为id的列设置为主表,并将其设置为自动增量。
在我正在进行的一个新项目中,对于每一行,我需要一个特定长度的唯一id,在本例中为15个字符。
那么我的问题是,用这个15个字符的数字id代替一个自动递增的id有问题吗?是否有使用自动递增号的技术原因?
我使用它生成I,因此,据我所知,它们肯定是唯一的:
$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;
}发布于 2015-09-03 20:11:48
不,MySQL不需要有一个自动递增的ID列.但是,作为手册中注明,索引键对于良好的数据库设计是必不可少的。如果您正在手动生成ID,而不是使用自动增量,这很好,但请确保用于生成ID的算法总是生成唯一ID(这与您发布的算法不同)。
发布于 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)。
发布于 2015-09-03 20:10:11
表中不需要有一个自动递增的id。您可以使用您要创建的id作为主键。至于您的randomNumber()函数:我相信您知道,不能保证数字会有所不同,这只是一个非常好的机会。如果您想使用它,您应该添加一个检查,看看数据库中是否已经存在这个数字。
https://stackoverflow.com/questions/32384540
复制相似问题