【问题标题】:How to decrement the sequence on an column with auto increment as a constraint, when records are deleted删除记录时,如何减少具有自动增量作为约束的列上的序列
【发布时间】:2013-11-29 11:44:52
【问题描述】:
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 继续。我希望如果删除一条记录,它的编号应该得到自动递减

【问题讨论】:

  • 为什么需要?如果需要,请手动执行,不要使用自动增量。
  • 如果记录被删除,我该如何做减量
  • 我唯一标识了员工的每条记录。
  • @J2D8T :这不是重复的问题。我正在删除基于 Id 的记录

标签: mysql auto-increment


【解决方案1】:

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

删除你正在自动递增的字段。 更改表以再次添加具有相同属性的字段。

那么自增列表会被重置。

注意:在 DROP 表时要小心。它可能会丢弃您的全部数据。

【讨论】:

    【解决方案2】:

    通过递减 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.";}   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-25
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多