Nested Set モデルを使用して階層型の MySQL テーブルをセットアップしています。組織を削除できるストアド プロシージャを作成しました。
ストアド プロシージャを連続して呼び出しようとすると、2 番目の CALL コマンドに関する次のエラーが表示されます。
2014 - コマンドが同期していません。現在、このコマンドを実行することはできません
私が実行しているSQLは次のとおりです。
SELECT @id := id,
@parent_id := parent_id
FROM organization
WHERE name = 'TESTDEAL';
CALL deleteOrg(@id);
CALL deleteOrg(@parent_id);
そして、ここに私のストアドプロシージャがあります:
DELIMITER $$
CREATE PROCEDURE deleteOrg(IN IN_ID INT)
MODIFIES SQL DATA
BEGIN
START TRANSACTION;
SELECT @org_id := id,
@myLeft := lft,
@myRight := rgt,
@myWidth := rgt - lft + 1
FROM organization
WHERE id = IN_ID;
# delete statements for removing roles and other dependencies
DELETE FROM organization
WHERE id = @org_id;
UPDATE organization
SET rgt = rgt - @myWidth
WHERE rgt > @myRight;
UPDATE organization
SET lft = lft - @myWidth
WHERE lft > @myRight;
COMMIT;
END;
$$
DELIMITER ;
2 番目のコマンドが失敗するのはなぜですか? 最初の CALL コマンドがコミットされる前に、MySQL が 2 番目の CALL コマンドを実行しようとしていますか? 2番目を呼び出す前に最初のものを完全に実行させる方法はありますか?
編集: 組織テーブルは InnoDB を使用しています
編集: START TRANSACTION を削除しようとしました。およびコミット; しかし、まだ同じエラーが発生しています