删除记录时,如何以自动增量作为约束递减列上的序列

时间:2013-11-29 11:44:53

标签: mysql auto-increment

create table quiz(E_Id INT NOT NULL AUTO_INCREMENT PRIMAR KEY, E_name VARCHAR(255), E_Salary INT)

现在每当我在表格中插入数据时,自动增量按预期工作。 现在,当我删除记录时,数字序列不会减少。

假设我有Id 1,2,3,4,5的记录。当我删除第2和第3个记录时,序列从数字6继续。我希望如果删除记录,则编号应该得到自动递减

2 个答案:

答案 0 :(得分:0)

无法自动递减。但是你可以使用其他简单的方法。

DROP你是auto_incrementing的字段。 改变表格以使用相同的属性再次添加字段。

然后自动递增列表将重置。

注意:在您下桌时要小心。它可能会丢弃您的整个数据。

答案 1 :(得分:0)

通过递减1(-1)更新所有已删除的ID(如果auto_increment列中有3个id,并且删除id 2,则id 3将设置为id = 2),然后“ alter table set auto_increment = 1更新auto_increment计数器。 代码(包括从网站文件夹中删除图像文件:

$allGood = false; 

if(isset($_GET['id']) != ""){
        $item = $_GET['id'];
        $query = "SELECT * FROM products WHERE id = ?";
        if($getImgPath = $sqlConnection->prepare($query)){
            $getImgPath->bind_param("i",$item);
            $getImgPath->execute();
            $result = $getImgPath->get_result();
            $row    = $result->fetch_array();
            $deletedItemId = $row['id'];        
            if(isset($row['image']) != ""){
                $imgPath = "../../../../".$row['image'];
                if(unlink($imgPath)){
                    $query = "DELETE FROM products WHERE id = ?";
                    if($delete = $sqlConnection->prepare($query)){
                        $delete->bind_param("i",$item);
                        if($delete->execute()){ 

                                $query = "SELECT * FROM products";
                                if($getIds = $sqlConnection->query($query)){
                                    while($row = $getIds->fetch_array()){   
                                    if($row['id']>$deletedItemId){
                                    $newId = $row['id']-1;
                                    $query = "UPDATE products SET id=? WHERE id=?";
                                       if($updateIds = $sqlConnection->prepare($query)){
                                        $updateIds->bind_param("ii",$newId,$row['id']);
                                            if($updateIds->execute()){                                          
                                            $allGood = true;
                                            }                                                   
                                       }
                                    } else {$allGood = true;}
                                }

                        }
                    }           
                } 
            }
        }
    } 
}

if($allGood == true){
    $query = "ALTER TABLE products AUTO_INCREMENT = 1";
    if($sqlConnection->query($query)){
    echo "success!";
    }else{echo "error.";}   
}