我想在不创建循环的情况下在多个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触发器。
答案 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表。