2013-04-08 63 views
2

我已经在MySQL数据库中的以下三个表名为“My_Company”查找和插入一行到另一台mysql的触发器

mysql> desc employee; 
+----------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+----------+-------------+------+-----+---------+-------+ 
| Id  | int(11)  | NO | PRI | 0  |  | 
| Emp_Name | varchar(20) | YES |  | NULL |  | 
| Division | varchar(20) | YES |  | NULL |  | 
+----------+-------------+------+-----+---------+-------+ 
3 rows in set (0.00 sec) 

mysql> desc tools; 
+-----------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+-------------+------+-----+---------+-------+ 
| Division | varchar(20) | NO | PRI |   |  | 
| Tool_No | int(11)  | NO | PRI | 0  |  | 
| Tool_Name | varchar(20) | YES |  | NULL |  | 
+-----------+-------------+------+-----+---------+-------+ 
3 rows in set (0.01 sec) 

mysql> desc employee_tools; 
+---------+-------------+------+-----+---------+-------+ 
| Field | Type  | Null | Key | Default | Extra | 
+---------+-------------+------+-----+---------+-------+ 
| Id  | int(11)  | YES |  | NULL |  | 
| Tool | varchar(20) | YES |  | NULL |  | 
| Status | varchar(20) | YES |  | NULL |  | 
+---------+-------------+------+-----+---------+-------+ 
2 rows in set (0.02 sec) 

------------------------------------------------------------------------------------- 

我需要插入的表格工具,以表employee_tools行,当上插入新行表员工。

例如,如果我插入一个新行员工值(“1”,“米歇尔”,“网络”) 则触发器应找到分工表工具 的tool_names和行添加到employee_tools

mysql> insert into employee values('1','Michel','Network'); 
Query OK, 1 row affected (0.05 sec) 

mysql> select * from employee; 
+----+----------+----------+ 
| Id | Emp_Name | Division | 
+----+----------+----------+ 
| 1 | Michel | Network | 
+----+----------+----------+ 
1 row in set (0.00 sec) 

mysql> select * from tools; 
+----------+---------+--------------+ 
| Division | Tool_No | Tool_Name | 
+----------+---------+--------------+ 
| Network |  1 | Crimper  | 
| Network |  2 | LAN Tester | 
| Network |  3 | Sleaver  | 
| Hardware |  1 | Screw drv | 
| Hardware |  2 | Power Tester | 
| Hardware |  3 | Plyer  | 
+----------+---------+--------------+ 
3 rows in set (0.00 sec) 

mysql> select * from employee_tools; 
+------+------------+------------+ 
| Id | Tool  |Status  | 
+------+------------+------------+ 
| 1 | Crimper |Working  | 
| 1 | LAN Tester |working  | 
| 1 | Sleaver |working  | 
+------+------------+------------+ 
3 rows in set (0.00 sec) 

状态会像下面手动更新...

+------+------------+------------+ 
| Id | Tool  |Status  | 
+------+------------+------------+ 
| 1 | Crimper |Working  | 
| 1 | LAN Tester |Not working | 
| 1 | Sleaver |Broken  | 
+------+------------+------------+ 
+0

为什么你有employee_tools表呢?没有该表格,您可以轻松获得该信息。在你的问题中没有看到任何意义。 – fancyPants 2013-04-08 10:08:02

回答

5

就这么简单:

DROP TRIGGER IF EXISTS trg_emp_tools; 
CREATE TRIGGER trg_emp_tools AFTER INSERT ON employee 
FOR EACH ROW 
BEGIN 
INSERT INTO employee_tools (Id, Tool, Status) 
SELECT NEW.Id, tools.Tool_Name, 'Working' 
FROM 
tools 
WHERE Division = NEW.Division; 
END; 
+0

其工作.... – 2013-04-09 03:06:53

+0

如何在employee.division – 2013-04-09 03:08:51

+2

上更新时如何写这样的触发器的触发器通常它在stackoverflow上是这样工作的。你遇到了问题,你尝试了一些东西,被困住了,你发布了你已经尝试过的东西,问题出在哪里以及期望的结果是什么 - >我们很乐意提供帮助。很难说出你甚至想要做什么,当你写下“在employee.division更新时着火”。 – fancyPants 2013-04-09 08:02:55

0

那些人使用phpmyadmin的,你需要在你的触发添加分隔符:

delimiter $$ 
DROP TRIGGER IF EXISTS copy_trig; 
CREATE TRIGGER copy_trig AFTER INSERT ON test 
FOR EACH ROW 
BEGIN 
insert into test_archive 
select * from test where id = New.id; 
END$$ 
delimiter ; 
相关问题