我有一个有 26500 行的表(汽车)。行号 10001 可以删除到最后吗?
答案 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