是否可以使用触发器根据值将值从一个表插入到另一个表?

rt4zxlrg  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(323)

我有一个名为employee的表。我还有另外两张表,叫做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\u部门,我想将该雇员插入到特定的表中。

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

如果员工所在部门是人力资源管理部门,我希望将该员工插入到人力资源管理表中,如何通过mysql触发器或存储过程来实现?

fcy6dtqo

fcy6dtqo1#

尝试以下操作:

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 新员工的“人力资源管理”等于“人力资源管理”:如果是,则在人力资源管理表中插入,否则触发器不执行任何操作
如果你想对“会计”做同样的事,逻辑是一样的

相关问题