删除中间的一行以及如何刷新mysql中的表id(自动增量)

时间:2012-01-06 14:51:39

标签: php mysql

例如:

Row Name
1   John
2   May
3   Marry
4   Tom
5   Peter

假设我删除了第2行和第3行,是否可以将Tom和Peter分别更新为第2行和第3行,将下一个插入行更新为第4行?

3 个答案:

答案 0 :(得分:2)

是的,但您需要重新创建Row:

ALTER TABLE `users` DROP `Row`;
ALTER TABLE `users` AUTO_INCREMENT = 1;
ALTER TABLE `users` ADD `Row` int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

答案 1 :(得分:1)

不,因为想想这可能造成的问题。想象一下,如果您正在管理商店库存,并且每个商品都有一个内部条形码,则基于数据库表中的ID。您决定永远不再存储一个项目并将其从数据库中取出,然后ID大于删除项目的每个项目的每个ID都会减1 ...所有这些条目上的所有条形码都变得无用。

数据库中的ID号通常不是由人们使用或引用。它们是数据库中某个项目的静态索引,它允许计算机快速可靠地提取给定记录。在创建表的ID字段时,请确保使数据类型足够大,以便在发生这些ID时丢失这些ID。

答案 2 :(得分:0)

这只是一个建议。我不是说这是最好的解决方案。请考虑一下。

您执行删除查询。

DELETE FROM table_name WHERE Row IN (2,3);

删除后,使用PHP进行选择查询请求,并将数据集设置为数组。

SELECT Row, Name from table_name ORDER BY Row ASC;

然后使用循环执行UPDATE。

$index = 1;
foreach($dataset as $item)
{
// Your update query
$sql = "UPDATE table_name SET Row=$index where Name='" . $item['Name'] . "'";
$index++;
}

在插入下一个查询之前,您必须获取Row的最大值并将+1值设置为插入查询的Row。 这只是一个想法。不是完整的代码。