使用MySQL分块删除

使用MySQL分块删除,mysql,sql-delete,Mysql,Sql Delete,我试图从AWS RDS MySQL实例中分块删除大量数据。我正在尝试修改本文中的代码,但我遇到了一个无法修复的语法错误 错误: 代码: 开始。。。END和LOOP语句仅在MySQL存储程序的上下文中有效,例如过程、函数、触发器、 作为用法示例: DELIMITER $$ CREATE PROCEDURE foo BEGIN SET ... ; SET ... ; myloop: LOOP ... END LOOP myloop; END$$ DELI

我试图从AWS RDS MySQL实例中分块删除大量数据。我正在尝试修改本文中的代码,但我遇到了一个无法修复的语法错误

错误:

代码:

开始。。。END和LOOP语句仅在MySQL存储程序的上下文中有效,例如过程、函数、触发器、

作为用法示例:

DELIMITER $$

CREATE PROCEDURE foo 
BEGIN 
   SET ... ;
   SET ... ; 
   myloop: LOOP 
     ...
   END LOOP myloop;
END$$

DELIMITER ;
假设我们没有看到CREATEPROCEDURE语句,我们将猜测错误消息是作为裸语句执行的结果。语法错误是预期的结果


@RickJames:OP是下面的例子,页面上没有显示语法仅在MySQL存储程序的上下文中有效。在声明匿名块之前,可能需要设置不同的分隔符。类似于分隔符$$BEGIN的内容。。。终止定界符;
SET @apt = 'DTW'; 

SET @a = (SELECT MIN(operation_id) FROM operations_test);

BEGIN
    main1: LOOP
        SELECT @z := operation_id FROM operations_test WHERE operation_id >= @a ORDER BY operation_id LIMIT 1000,1;
        IF @z IS NULL THEN
          LEAVE main1;  -- last chunk
       END IF;
       DELETE operations_test, profiles_test FROM profiles_test LEFT JOIN operations_test ON operations_test.operation_id=profiles_test.operation_id WHERE operations_test.airport_id = @apt
            AND operations_test.operation_id >= @a
             AND operations_test.operation_id <  @z;
       DELETE operations_test FROM operations_test WHERE airport_id = @apt
            AND operation_id >= @a
             AND operation_id <  @z;
       SET @a = @z;
        SLEEP 1;  -- be a nice guy, especially in replication
    END LOOP main1;
END;
# Last chunk:
DELETE operations_test, profiles_test FROM profiles_test LEFT JOIN operations_test ON operations_test.operation_id=profiles_test.operation_id WHERE operations_test.airport_id = @apt
    AND id >= @a;
DELETE operations_test FROM operations_test WHERE airport_id = @apt
    AND id >= @a;
DELIMITER $$

CREATE PROCEDURE foo 
BEGIN 
   SET ... ;
   SET ... ; 
   myloop: LOOP 
     ...
   END LOOP myloop;
END$$

DELIMITER ;