Mysql触发器更新多个表中的列

时间:2014-12-06 12:07:13

标签: mysql triggers

我希望在table1中更新列时更新table2中的列。

我有2名员工和company_details

这是我的员工表

    emp_id  |  emp_name  |  location
       1    |     xxx    |  germany
       2    |     yyy    |  auckland

这是我的company_details表

    id      |  emp_name  |    role
     1      |     xxx    |   software developer
     2      |     yyy    |   tester

当我尝试在employee表中更新列emp_name时,我想自动更新company_details中的字段emp_name。我可以编写一个查询,当一个表列更新时,另一个表列也会更新。

1 个答案:

答案 0 :(得分:0)

虽然你可以做到

CREATE TRIGGER emp_name_update
AFTER UPDATE ON employee
FOR EACH ROW
UPDATE company_details 
   SET emp_name = NEW.emp_name
 WHERE emp_name = OLD.emp_name;

这是 SQLFiddle 演示

非常糟糕的架构设计。您应该在emp_id中使用company_details作为外键。

CREATE TABLE employee
(
  emp_id int not null primary key, 
  emp_name varchar(32), 
  location varchar(32)
);
CREATE TABLE company_details
(
  id int not null primary key,
  emp_id int, 
  role varchar(32),
  foreign key (emp_id) references employee (emp_id)
);

这样,在查询时,您不需要更新任何内容,而是JOIN两个表。

SELECT id, emp_name, role
  FROM company_details d JOIN employee e
    ON d.emp_id = e.emp_id;

这是 SQLFiddle 演示