2013-09-28 53 views
0

所以,我有一个表,通过以下插入触发更新某些列

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`) 
) 

给出的SQL描述它具有给定的数据

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不同于它是由1

这里left_id是我到目前为止,但它给了我一个错误

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. 

我迷失在这一个。任何帮助?

+0

你尝试之前插入扳机? – jomsk1e

回答