插入多个表时,这个问题的最佳方法是什么?

时间:2016-05-19 05:12:54

标签: sql postgresql stored-procedures triggers sql-insert

我不确定是否存在争议。

当我阅读书籍时,我建议使用triggers跟进其他表中的插入内容。另一方面,我的导师使用stored procedures插入其他表格。

我的问题在这里,哪种方法最好?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果你想在表上插入数据,你只能通过存储过程而不是触发器来完成,因为触发器在运行时不能接受参数或任何东西。

您可以从另一个存储过程内部调用存储过程,但不能直接调用触发器中的另一个触发器。

所以我认为你应该使用存储过程而不是触发

有关详细信息,您可以访问以下链接。

http://www.codeproject.com/Tips/624566/Differences-between-a-Stored-Procedure-and-a-Trigg

请回复我的回答。

答案 1 :(得分:0)

你也不需要。启动一个事务,完成所有插入(先父表,后面是子表),用COMMIT结束事务,然后就完成了。

如果要捆绑存储过程并确保某种一致性(例如,父表至少总有一个子表),请使用存储过程。但这可能会变得复杂。假设您要插入一个包含所有颜色,尺寸,供应商和销售市场的新产品。某些颜色/尺寸将由一个或多个供应商提供,而不是由其他供应商提供,与销售市场相同。为了显示这些关系,我们通常使用表格,但现在你必须以某种方式将它们放入参数中,以便将它们插入到表格中。我被告知有些人在程序中都有他们的数据库写入。这可能是可能的,但有其局限性。

关于触发器自动插入:您可以使用它们来记录数据,以便获取历史记录等,但您不能使用它们来插入业务数据。想一下其位置的订单:您插入订单标题(订单日期,客户编号,......),但触发器如何知道订购了哪些商品?反之亦然:您插入订单位置(项目编号,价格)并希望自动创建标题,但触发器如何知道客户编号?触发器不适用于此类事物。

如上所述:通常,您只需在事务中使用纯SQL即可。