我需要在2个不同的表中插入2条记录。问题是这两个记录将具有相同的Id。 例如:
我有我的Mannto表,其IdMan和oters字段。我还有我的服务表及其IdServ。
我能做些什么来使这个平等?我正在使用Postgre。 Mannto表的Id是串行的,我需要在Service表中使用那个作为外键
我尝试了以下操作,但它不起作用:
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 :(得分:2)
INSERT INTO Mannto ( field1, field2 ...etc) VALUES ( 'f1', 'f2'...etc)
RETURNING idMan;
http://www.postgresql.org/docs/current/static/sql-insert.html
答案 1 :(得分: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
答案 2 :(得分:0)
也许这不是最佳解决方案,但您可以使用触发器。
CREATE TRIGGER MannToTrigger
AFTER INSERT OR UPDATE OR DELETE ON MannTo
FOR EACH ROW EXECUTE PROCEDURE insertService();
获取MannTo插入的最后一个代码,并在每次插入后抛出该过程。