SQL触发器多个表

时间:2014-04-08 10:45:08

标签: mysql triggers sql-update

我想在不创建循环的情况下在多个sql表上触发更新。 可以说我有两张桌子:

Table: User_Names
---------------
|Name | Clark |
|Gen  |  Male |
|id   |     1 |
---------------

Table: User_Ages
---------------
|Age  |     34|
|Gen  |  Male |
|id   |     1 |
---------------

id是唯一的并且指向同一个人。
我想更新User_Names中的 Gen 列,我的触发器应该在另一个表中更新它。
<当我在User_Ages表中更改它时,我也希望这发生,但是如果两者都互相更新我在mysql中的Update触发器上创建一个循环。如何防止此循环?

这里的重点是创建SQL触发器。

1 个答案:

答案 0 :(得分:1)

鉴于你的例子的性质,我不会解决你原来的问题。这是一个标准化问题,不仅仅是触发问题。

在这种情况下,您应该规范化数据并仅将其存储在一个位置。上面的示例还表明您对如何使用行和列有轻微的误解。

鉴于这个例子,更好的布局可能是:

Table: User_names
+----+---------+------+
| id | Name    | gen  |
+----+---------+------+
| 1  | Clark   | Male |
+----+---------+------+


Table: User_Ages
+----+------+
| id | age  |
+----+------+
| 1  | 34   |
+----+------+

如果要检索这两个值,只需在查询中链接它们,例如

SELECT user_names.id,name,gen,age FROM User_names JOIN User_Ages USING (id);

会给你:

+----+---------+------+-----+
| id | Name    | gen  | age |
+----+---------+------+-----+
| 1  | Clark   | Male | 34  |
+----+---------+------+-----+

<小时/> 回到你原来的问题:在这样的情况下,我会质疑原始设计。如果确实需要它,那么我将选择一个充当主表的表并将更改传播到其他表。例如。在User_names表上定义触发器,并使用它来填充User_Ages表。