mysql - 是否可以使用触发器根据值将一个表中的值插入到另一个表中?
问题描述
我有一个名为员工的表。我还有另外两个名为 hrm,accounting 的表。我想根据他们的部门将员工插入人力资源管理和会计表。
CREATE TABLE employees (
employee_id INT(4) NOT NULL AUTO_INCREMENT,
employee_first_name VARCHAR(30) NOT NULL,
employee_last_name VARCHAR(30) NOT NULL,
employee_department VARCHAR(30) NOT NULL,
PRIMARY KEY (employee_id));
根据employee_department,我想将该员工插入到该特定表中。
CREATE TABLE hrm (
employee_id INT(4),
employee_designation VARCHAR(20),
FOREIGN KEY (employee_id)
REFERENCES employees (employee_id)
ON DELETE CASCADE);
CREATE TABLE accounting (
employee_id INT(4),
employee_designation VARCHAR(20),
FOREIGN KEY (employee_id)
REFERENCES employees (employee_id)
ON DELETE CASCADE);
如果employee_department 是hrm,我希望该员工被插入到hrm 表中,我该如何通过mysql 触发器或存储过程来实现呢?
解决方案
尝试这样的事情:
CREATE DEFINER = CURRENT_USER TRIGGER `employees_AFTER_INSERT` AFTER INSERT ON `employees`
FOR EACH ROW
BEGIN
IF NEW.employee_department = 'hrm' THEN
INSERT INTO hrm
(employee_id, employee_designation)
VALUES
(NEW.employee_id, /*whatever you add here*/);
END IF;
END
我将解释一些关键点:
- 在
AFTER INSERT
触发器中,您可以使用 获取插入的值NEW
。所以这里 :NEW.employee_department
等于employee_department
新员工的插入值,同样适用于NEW.employee_id
(对于触发器,您AFTER DELETE
可以使用OLD
,对于更新值和更新前的值)AFTER UPDATE
NEW
OLD
- 在 MySQL 触发器中,您可以添加条件:这里我检查
employee_department
新员工的新员工是否等于“hrm”:如果是,则在您的人力资源表中插入,否则触发器什么也不做 - 如果你想对“会计”做同样的事情,逻辑是一样的
推荐阅读
- java - 消耗 Vavr 的“左”和“右”?
- html - 我的标签标签导致我的输入框无法在任何地方点击。我该如何解决?
- javascript - 如何根据同一日期合并两个对象数组
- c# - 在其他 LINQ 查询中使用来自 LINQ 查询的结果的问题
- python - python中的网络抓取返回[]
- azure - Azure 应用程序无法启动并收到 HTTP 500 错误
- swift - 数组没有被洗牌并且屏幕被重绘
- python - 从 API 的多个页面检索的安全数据
- reactjs - 升级到 Gatsby v.2 后组件没有在 React 中呈现,即使我在 Gatsby CLI 中没有错误
- html - 谁能解释一下“在 HTML 中,计算机可以解释包含在 HTML 元素中的原始文本”