У меня есть иерархическая таблица MySQL с использованием модели Nested Set.Я создал сохраненный процесс, который позволяет мне удалить организацию.
Когда я пытаюсь сделать последовательные вызовы сохраненного процесса, я получаю следующую ошибку, относящуюся ко второй команде 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 до того, как первая будет зафиксирована?Есть ли способ заставить первый полностью выполнить выполнение перед вызовом второго?
РЕДАКТИРОВАТЬ: организационная таблица использует InnoDB
РЕДАКТИРОВАТЬ: Попытка удаления START TRANSACTION;и COMMIT;но я все еще получаю ту же ошибку