mysql触发器信息从一对多关系插入和更新触发器

时间:2019-03-21 14:37:09

标签: mysql triggers

我有3个表:a,b和c。表a与表b具有一对多关系,表c是从其他2个表中获取触发信息的表。

 table a
 ------------------
  id     |    name
   1     |    Juan 
   2     |    Pete
   3     |    David

 table b
 ----------------------
  id  |  name   | table_a_id
   1  |  Dog    |     1
   2  |  Cat    |     2

表C从表A中获取信息,并在表A上插入“ 对于插入到C中的每一行“还从表B中获得信息,并带有“ 在插入到B中的每一行之后更新C ”。

 table c
----------------------
id | name a | name b | table_a_id |table_b_id
 1 |  juan  |   Dog  |      1     |      1
 2 |  Pete  |   Cat  |      2     |      2

当Pete想要同时拥有Cat和Dog时会发生此问题,因为它只会更新Pete的信息。我想要的是一种可以使所有信息都带有新行的方式。

      table c
     -------------------------------------------
    id | name a | name b | table_a_id |table_b_id
     1 |  juan  |   Dog  |      1     |      1
     2 |  Pete  |   Cat  |      2     |      2
---->3 |  Pete  |   Dog  |      2     |      1

将不会创建表C的第三行,只会更新表C的第二行。

1 个答案:

答案 0 :(得分:0)

您应该创建一个“虚拟表”或view,而不是table c的物理副本。

例如:

CREATE VIEW table_c AS (
    SELECT
    t1.id AS a_id,
    t1.`name` AS a_name,
    t2.id AS b_id,
    t2.`name` AS b_name
    FROM table_a t1
    LEFT JOIN table_b t2
    ON (t2.table_a_id = t1.id)
)  

现在您可以像这样从“表”中获取行:

SELECT * FROM table_c