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?