从特定行删除到最后一行

时间:2021-02-09 17:17:49

标签: mysql

我有一个有 26500 行的表(汽车)。行号 10001 可以删除到最后吗?

2 个答案:

答案 0 :(得分:1)

InnoDB 表

如果要从大表中删除许多行,则可能会超出 InnoDB 表的锁表大小。为了避免这个问题,或者只是为了尽量减少表保持锁定的时间,以下策略(根本不使用 DELETE)可能会有所帮助:

第一步:选择不删除的行放入与原表结构相同的空表中:

INSERT INTO `cars_copy`  SELECT * FROM `cars` LIMIT 10000 ;

第 2 步:使用 RENAME TABLE 以原子方式将原始表移开,并将副本重命名为原始名称:

RENAME TABLE `cars` TO `cars_old`, `cars_copy` TO `cars` ;

第 3 步:删除原始表:

DROP TABLE `cars_old`;

RENAME TABLE 执行时没有其他会话可以访问涉及的表,因此重命名操作不会受到并发问题的影响。

答案 1 :(得分:0)

当您的行标有 ID 时,您可以这样做:

DELETE FROM cars WHERE ID > 10000