mysql - 查找行并将其插入到另一个表mysql触发器

标签 mysql triggers insert find

我在 mysql 数据库中有以下三个表,名为“My_Company”

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中的行插入到表employee_tools中。

示例,如果我将新行插入到员工值中,如 ('1','Michel','Network') 那么触发器应该从表tools中找到部门的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      |
+------+------------+------------+

最佳答案

就这么简单:

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;

关于mysql - 查找行并将其插入到另一个表mysql触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15875953/

相关文章:

mysql - 搜索特定行中的文本

mysql - 确保在 MySQL 中填写顺序字段

mysql - 从一个表中获取数据并将其存储到另一个表中

mysql - 结果包含多行

java - 导入数据库驱动

mysql - 如何从MySQL中的日期和时间范围获取数据

mysql - 使用内部 n 引用创建 View

MySQL 从 2 个源表插入到 1 个目标表

php - 在谷歌日历中插入事件

C程序无法识别空指针