0

だから、私は以下のSQLで記述されたテーブルを持っています

CREATE TABLE IF NOT EXISTS `employees` (
`e_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`e_username` varchar(100) NOT NULL,
`left_id` int(10) unsigned NOT NULL,
`right_id` int(10) unsigned NOT NULL,
`e_ssn` int(5) unsigned NOT NULL DEFAULT '0',
`e_first_name` varchar(100) NOT NULL,
`e_last_name` varchar(100) NOT NULL,
`e_address` text NOT NULL,
`e_location` int(10) unsigned DEFAULT NULL,
UNIQUE KEY `e_id` (`e_id`),
UNIQUE KEY `e_username` (`e_username`)
)

そして、それは与えられたデータを持っています

INSERT INTO `employees` (`e_id`, `e_username`, `left_id`, `right_id`, `e_ssn`, `e_first_name`, `e_last_name`, `e_address`, `e_location`) VALUES
(1, '100884', 1, 8, 444444444, 'James', 'Burnbridge', '1123 fdkjfjdkfjdfkjd', 76),
(2, '100885', 2, 7, 0, 'Frank', 'Grimsley', '123 Fayke St', 76),
(5, '100886', 3, 4, 0, 'Mark', 'Hill', 'kfjdkfjdf\r\nkofjdkfjdkfdj', 76),
(6, '100887', 5, 6, 0, 'fdfdfd', 'fdfdfd', 'fdfdfdf', 76);

新しい行を入力すると、そのようになるトリガーを作成したい

INSERT INTO employees(e_username,left_id,right_id,e_ssn, e_first_name, e_last_name, e_address, e_location)
VALUES('100888', 0, 0, 0, 'New','User', '100 NotReal st city, state zip', 76)

left_id 列と right_id 列が、その場所の最初のユーザーの right_id に基づいて更新され、right_id が left_id と 1 だけ異なるようにしたいと考えています。

ここに私がこれまでに持っているものがありますが、エラーが発生します

DROP TRIGGER IF EXISTS  `after_insert_employees` ;

CREATE DEFINER =  `root`@`localhost` TRIGGER `after_insert_employees` AFTER INSERT ON  `employees` 
FOR EACH
ROW BEGIN 
DECLARE r_id INT;
SELECT max(right_id) INTO r_id FROM employees WHERE e_location=new.e_location AND right_id = left_id+1;
UPDATE employees SET left_id = r_id+1 AND right_id = r_id+2 WHERE e_id = new.e_id;
END

何かを挿入しようとすると、このエラーが発生します

 #1442 - Can't update table 'employees' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.  

私はこれで迷っています。何か助けはありますか?

4

1 に答える 1

0

トリガーは、挿入しているのと同じテーブルを更新しようとします。挿入が行われると、MySQL はテーブルをロックします。

このリンクはあなたを助けるかもしれません

MySql エラー: このストアド関数/トリガーを呼び出したステートメントで既に使用されているため、ストアド関数/トリガーのテーブルを更新できません

于 2013-09-28T06:28:27.097 に答える