-1
在删除我的行的一部分后,我经常需要“重置”我的表的AUTO_INCREMENT值。让我用一个实际的例子来解释:MySQL将AUTO_INCREMENT的值设置为MAX(id)+ 1的快捷方式?
我有一张叫CLIENT
的表。让我们说在删除一些行之前,auto_increment被设置为11
。然后我删除最后4行。 auto_increment仍然被设置为11.所以当我再次插入一些客户端时,它会造成一个id的漏洞。我总是需要“清理”auto_increment,例如,使用下面这个函数:
function cleanAutoIncrement($tableName, $columnAutoIncrement, $pdo)
{
$r = false;
try {
$p = $pdo->prepare("SELECT IFNULL(MAX($columnAutoIncrement) + 1, 1) AS 'max' FROM $tableName LIMIT 1;");
$p->execute();
$max = $p->fetch(PDO::FETCH_ASSOC)['max'];
$p = $pdo->prepare("ALTER TABLE $tableName AUTO_INCREMENT = $max;"):
$p->execute();
$r = true;
}
catch(Exception $e) {
$r = false;
}
return $r;
}
功能做的是让在表中最大的ID,然后递增1它,并返回它的值(如果有表中没有行,它返回1)。然后我改变桌子重置一个“干净的”ID为了不让任何id的洞。
问题
是否有任何MySQL的命令,而无需手动执行此操作执行此任务?
被问了很多次,序列中的空白并不是值得注意的问题 – e4c5
让MySQL重置表中自动增量列的计数器的唯一方法是**截断**表(这是不是你想要的)。其次,我完全同意@ e4c5。为什么总是让ID无间隙地运行对你来说很重要? – FDavidov
您的ID之间不需要任何差距的原因是什么?正如@ e4c5所提到的,在_auto increment ID_中不可避免地存在空白。如果你需要这样的字段,最好创建另一个整数字段并手动计算/生成它(我强烈建议你避免它!) – EhsanT