我有一个使用嵌套集模型的分层 MySQL 表设置。我创建了一个存储过程,允许我删除一个组织。
当我尝试对存储过程进行连续调用时,我收到以下关于第二个 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 ;
为什么第二个命令会失败?MySQL 是否在提交第一个 CALL 命令之前尝试执行第二个 CALL 命令?有没有办法在调用第二个之前强制第一个完全执行?
编辑:组织表正在使用 InnoDB
编辑:尝试删除 START TRANSACTION;和承诺;但我仍然遇到同样的错误