【问题标题】:Is it possible to insert a value from one table to another on the basis of value using trigger?是否可以使用触发器根据值将一个表中的值插入到另一个表中?
【发布时间】:2018-10-17 08:45:37
【问题描述】:

我有一个名为employee 的表。 我还有另外两个名为 hrm 的表,会计。 我想根据部门将员工插入到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 触发器或存储过程来实现?

【问题讨论】:

  • 插入新员工时触发器应该是AFTER INSERTAFTER UPDATE 员工部门是否更新? AFTER DELETE何时删除员工?
  • 是的,这就是我要找的,但如果可能的话,最初我很期待这个插入
  • 很难判断这个问题是关于触发器/过程还是流控制语句
  • @P.Salmon 这个问题是关于触发器/过程中的流控制。

标签: mysql stored-procedures database-trigger


【解决方案1】:

试试这样的:

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 触发器,您可以使用OLDAFTER UPDATE,您有NEW 用于更新value 和 OLD 为更新前的值)
  • 在 MySQL 触发器中,您可以添加条件:这里我检查新员工的新 employee_department 是否等于“hrm”:如果是,则在您的 hrm 表中插入,否则触发器不执行任何操作
  • 如果你想对“会计”做同样的事情,逻辑是一样的

【讨论】:

  • 非常感谢,我被困在了那个 NEW 上。你的解释给出了一个具体的想法。
  • 很高兴帮助你:)
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 2012-03-06
相关资源
最近更新 更多