我正试图正确地将所有行从一个表移动到另一个表,然后从原始表中删除它们而不重置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
。对于巨大的集合,永远不会,并且会使用上面的
是否存在外键约束会影响截断或删除成功的可能性。