2011-08-10 46 views
0

我需要将2条记录插入到2个不同的表格中。问题是这两个记录将具有相同的ID。 例如:我需要在不同表格中插入2条记录,

我有我的Mannto表,其IdMan和oters字段。我也有我的服务表,其IdServ。

我能做些什么来使这个平等?我正在使用Postgre。在Mannto表的ID是串行的,我需要使用一个作为服务表的外键

我尝试以下,但它不工作:

Insert into Mannto (idMan, field 1 field2 ...etc) 
      values (default, 'f1', 'f2'...etc) 

Insert into Service (idServ, fkMannto, field1...etc) 
      values (default, (in this part I need the same ManntoId called idMan), 'f1') 

感谢您的帮助你可以提供!

回答

0

也许它不是最好的解决办法,但你可以使用触发器。

CREATE TRIGGER MannToTrigger 
AFTER INSERT OR UPDATE OR DELETE ON MannTo 
    FOR EACH ROW EXECUTE PROCEDURE insertService(); 

获取您的MannTo插入最后一个代码并在每次插入后抛出过程。

+0

我试过的,但有一些问题,但非常感谢反正:)回答 – Jeil

1

当现场idMan使用序列来创建一个新的价值,你可以使用CURRVAL()指该值在接下来的INSERT:

BEGIN; -- start transaction 
     INSERT INTO Mannto (idMan, field 1 field2 ...etc) 
     VALUES (default, 'f1', 'f2'...etc); 
     INSERT INTO Service (idServ, fkMannto, field1...etc) 
     VALUES (default, currval('name_of_the_sequence') , 'f1'); 
COMMIT; -- commit both inserts 
+0

OMG MEN YOU YOU REEES !!!非常感谢,它非常完美!和:)再次感谢你! – Jeil

+0

和删除应该是一样的吗? BEGIN; DELETE FROM servicio WHERE pkmantenimiento =?; DELETE FROM mantenimiento WHERE idmantenimiento = CURRVAL('name_of_the_sequence'); COMMIT; – Jeil

+0

不,那不行。也不需要,只需在idmantenimiento上创建一个外键,当删除表servicio中的记录时,引用pkmantenimiento和mantenimeinte中的DELETE将由数据库自动完成。 –

相关问题