トリガーについて
このジャンルでお願いします。
次のようなテーブルで
DROP TABLE IF EXISTS item;
CREATE TABLE IF NOT EXISTS item (
id int(11) NOT NULL AUTO_INCREMENT,
parent_id INT,
name varchar(32) NOT NULL,
level int NOT NULL,
FOREIGN KEY (parent_id) REFERENCES item(id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO item (parent_id, name) VALUES (null, 'item1');
INSERT INTO item (parent_id, name) VALUES (1, 'item2');
INSERT INTO item (parent_id, name) VALUES (2, 'item3');
INSERT INTO item (parent_id, name) VALUES (3, 'item4');
INSERT INTO item (parent_id, name) VALUES (2, 'item5');
INSERT INTO item (parent_id, name) VALUES (null, 'item6');
INSERT INTO item (parent_id, name) VALUES (6, 'item7');
INSERT INTO item (parent_id, name) VALUES (null, 'item8');
DROP PROCEDURE IF EXISTS UPDATE_LEVEL;
DELIMITER //
CREATE PROCEDURE UPDATE_LEVEL()
BEGIN
DECLARE CNT INT;
DECLARE LVL INT;
SET LVL=1;
UPDATE item SET level=0;
UPDATE item
SET level=LVL
WHERE parent_id IS NULL;
SELECT COUNT(*) INTO CNT FROM item WHERE level=LVL;
WHILE CNT>0 DO
UPDATE item
INNER JOIN (SELECT id FROM item WHERE level=LVL) as temp ON parent_id=temp.id
SET item.level=LVL+1;
SET LVL=LVL+1;
SELECT COUNT(*) INTO CNT FROM item WHERE level=LVL;
END WHILE;
END
//
DELIMITER ;
DROP TRIGGER IF EXISTS TRG_INSERT_ITEM;
DELIMITER //
CREATE TRIGGER TRG_INSERT_ITEM AFTER INSERT ON item
FOR EACH ROW BEGIN
CALL UPDATE_LEVEL();
END;
//
DELIMITER ;
itemテーブルにinsertした場合にトリガーでUPDATE_LEVEL()を実行するようにしているのですが、
実際に挿入すると、
>Can't update table 'item' in stored function/trigger because it is already used by statment which invoked this stored function/trigger .
このようなエラーが出てしまいます・・・
UPDATE_LEVEL()にinsertらしき記述はないと思うのですが、
これはなぜこのようなエラーが出るのでしょうか?
補足
--------------------------------------------------------------------- [create-id.js] $(function() { $('a') .click(function() { var id = this.id; if(id == "create") { $(".delete").attr("class","default_insert"); $(".default_insert").attr("value","新規作成"); } }); }); --------------------------------------------------------------------- [insert-data.js] $(function() { $(".default_insert").click(function(){ alert("ssssss"); //return false; }); }); --------------------------------------------------------------------- ちなみに今作っているものです。もしよろしければご確認お願いします。 [ボタンをクリック]→[dialogが開かれる]→[新規作成のメニュをクリック] →[新規作成ボタンを押す]→[SSSS]が表示される [ボタンをクリック]→[dialogが開かれる]→[I3001をクリック]→[新規作成のメニュをクリック]→[新規作成ボタンを押す]→[SSSS]が表示されない http://low-cost-travel.chobi.net/start_dialog.php