在INSERT上触发多个表

时间:2012-02-14 15:46:07

标签: php mysql phpmyadmin

快速提问。

在我的用户数据库中,我有5个单独的表,所有表都包含不同的信息。 4个表格由foreign key连接到第一个表格的primary key

当我在第一个(主要)上插入时,我希望在其他4个表上插入trigger row。我认为ON UPDATE CASCADE会为我做这件事,但在尝试之后我意识到它没有......我知道线索的名称是ON UPDATE !!!!!

我也在同一张桌子上的多个触发器上尝试过但失败了,但发现这也不可能。

我打算做的是在第一个trigger上放INSERT,然后在第二个trigger上放insert ......等

我想知道这是否是明智之举,或者我是否错过了更好更简单的方法。

非常感谢任何帮助/建议。

2 个答案:

答案 0 :(得分:0)

根据给定的信息,它感觉"好像数据库设计中可能存在缺陷,如果每个子表都需要父表中每一行的一行。有一个原因是" ON INSERT CASCADE"不存在;它通常不被认为有意义。

首先想到的是,子表实际上应该是父表的一部分;听起来好像有一对一的关系。从组织的角度(和记录的大小)中分离表仍然是有意义的,但这是需要考虑的事情。

如果没有一对一的关系,那么将超出默认值的有意义数据添加到子表的能力意味着可能需要更多的数据标准化。如果要添加的唯一值是NULL,那么可能会认为记录中没有真正的意义,因为LEFT JOIN可以在没有该记录的情况下产生相同的结果。

说了这么多,如果需要的话,我认为在父表上有一个触发器将所有记录添加到子表而不是在几个触发器中链接它会更好。这样,逻辑将包含在一个位置。

答案 1 :(得分:0)

不了解你的结构(你在每个表中需要的信息都与正确答案相关),我只能猜测触发器可能不是你想要做的。如果您的表具有超出表1中的其他字段且它们没有默认值,那么如何在触发器中获取其他字段的值?我个人会使用存储过程插入到table1并从插入中获取id值,然后插入其他表所需的附加信息并将其全部放入事务中,这样如果一次插入失败,则全部回滚。