首页 > 解决方案 > 是否可以使用触发器根据值将一个表中的值插入到另一个表中?

问题描述

我有一个名为员工的表。我还有另外两个名为 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 触发器或存储过程来实现呢?

标签: mysqlstored-proceduresdatabase-trigger

解决方案


尝试这样的事情:

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 UPDATENEWOLD
  • 在 MySQL 触发器中,您可以添加条件:这里我检查employee_department新员工的新员工是否等于“hrm”:如果是,则在您的人力资源表中插入,否则触发器什么也不做
  • 如果你想对“会计”做同样的事情,逻辑是一样的

推荐阅读