首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以使用触发器根据值从一个表插入另一个表的值?

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

Stack Overflow用户
提问于 2018-10-17 08:45:37
回答 1查看 25关注 0票数 0

我有个叫雇员的桌子。我还有另外两张桌子叫做人力资源管理,会计。我想把员工按照他们的部门插入人力资源管理和会计表。

代码语言:javascript
运行
复制
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,我想将该雇员插入到特定的表中。

代码语言:javascript
运行
复制
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是人力资源管理,我希望该员工被插入人力资源管理表中,我如何通过mysql触发器或存储过程来实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 08:55:22

试着做这样的事情:

代码语言:javascript
运行
复制
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“:如果是,那么在人力资源管理表中插入,否则触发器什么也不做。
  • 如果您想对“会计”进行同样的操作,则逻辑是相同的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52850729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档