倒序删除表中数据的存储过程,带自引用关系的表挺有一套的。尤其是那种树状结构,比如分类表、评论表什么的,一条条删,顺序错了还真不行。这种写法思路清晰、逻辑简单,几行代码就搞定,响应也快,蛮适合你用来清理老数据的。

存储过程的逻辑不复杂,关键点就是用WHILE循环从最大 ID 开始删,直到删光为止。写起来也就十几行,容易维护,而且不容易出错。你不用担心级联删除失败那种情况,自己控制顺序,踏实!

哦对了,要注意别直接上生产库哈,建议先在测试环境跑一遍。是如果表里有自关联(比如parent_id那种),这个方式确实蛮靠谱的。代码也贴一下,方便你理解:

DELIMITER //
CREATE PROCEDURE delete_in_reverse()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE cur_id INT;
  DECLARE cur CURSOR FOR SELECT id FROM your_table ORDER BY id DESC;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur; read_loop: LOOP FETCH cur INTO cur_id; IF done THEN LEAVE read_loop; END IF; DELETE FROM your_table WHERE id = cur_id; END LOOP; CLOSE cur; END;// DELIMITER ;

如果你对存储过程感兴趣,还可以看看这些:

如果你手上正好有需要批量删除的老数据,尤其表结构还挺复杂,不妨试试看这种倒序删除的方式,简单直接,效果还不错。