Can't update table 'article_category' in stored function/trigger because it is already used by state

0

Helo!

Mam oto taki pliczek SQL:

DROP TABLE `article_category`;

CREATE TABLE IF NOT EXISTS `article_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `parent_id` int(11) DEFAULT NULL,
  `lft` int(11) NOT NULL DEFAULT '0',
  `rgt` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

INSERT INTO `article_category` (`id`, `name`, `parent_id`, `lft`, `rgt`) VALUES
(1, 'ROOT', NULL, 1, 1);

delimiter //
DROP TRIGGER IF EXISTS after_insert_article_category; //

CREATE TRIGGER after_insert_article_category
BEFORE INSERT ON article_category FOR EACH ROW
BEGIN
    DECLARE parent_rgt INT;
    SET parent_rgt = (SELECT rgt FROM article_category as at WHERE at.id = NEW.parent_id LIMIT 1);
    UPDATE article_category SET rgt = rgt + 2 WHERE rgt >= parent_rgt;
    UPDATE article_category SET lft = lft + 2 WHERE lft > parent_rgt;
    UPDATE article_category SET rgt = parent_rgt, lft = parent_rgt + 1 WHERE id = NEW.id;
END; //

INSERT INTO `article_category` (`id` ,`name` ,`parent_id` ,`lft` ,`rgt`)
VALUES (NULL, 'dziecko1', 1, '0', '0');

przy ostatnim INSERTcie dostaję taki błąd jak w temacie. Wiem, że MySQL zabrania modyfikowania tabeli, do której jest podpięty trygger, jednak bardzo by mi zależało na tym, aby te operacje jednak wykonać. Jak mógłbym to ugryźć inaczej?

1 użytkowników online, w tym zalogowanych: 0, gości: 1