将所有行从一个表移动到另一个表,从原始表中删除,但保留auto_increment


Moving all rows from one table to another, deleting from original table but retaining auto_increment

我正试图正确地将所有行从一个表移动到另一个表,然后从原始表中删除它们而不重置auto_increment值。

下面似乎重置auto_increment值…你知道我做错了什么吗?

$sql1   = "INSERT INTO archive SELECT * FROM main";
$result1 = mysqli_query($sqlsession, $sql1) or die(mysqli_error());
$sql2   = "truncate main";
$result2 = mysqli_query($sqlsession, $sql2) or die(mysqli_error());
DELETE FROM main

代替截断

为了速度和数据页大小的释放,我总是倾向于截断表。尽管必须将auto_inc设置回您想要的特殊情况。所以这是一种像下面这样的一拳两拳。

truncate table myTable;
alter table myTable AUTO_INCREMENT = 200001;

截断表手册页。stackoverflow的几个帖子都提到了这一点。

如果我只有几行,我会选择delete from myTable。对于巨大的集合,永远不会,并且会使用上面的

是否存在外键约束会影响截断或删除成功的可能性。