2016-11-14 251 views
-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的命令,而无需手动执行此操作执行此任务?

+2

被问了很多次,序列中的空白并不是值得注意的问题 – e4c5

+1

让MySQL重置表中自动增量列的计数器的唯一方法是**截断**表(这是不是你想要的)。其次,我完全同意@ e4c5。为什么总是让ID无间隙地运行对你来说很重要? – FDavidov

+0

您的ID之间不需要任何差距的原因是什么?正如@ e4c5所提到的,在_auto increment ID_中不可避免地存在空白。如果你需要这样的字段,最好创建另一个整数字段并手动计算/生成它(我强烈建议你避免它!) – EhsanT

回答

0

要关闭此问题,MySQL中不存在任何快捷方式,建议不要执行此任务。