让我们说我有两张桌子。
第一个是:表列表,包含list_id SERIAL,list_name TEXT
第二个表格通常是一个表,表明列表是否公开:list_id INT,is_public INT
显然是一个人为的案例,但我正在计划一些表格,这似乎是一个问题。如果我在表列表中插入一个新的list_name,那么它会给我一个新的序列号......但现在我需要在第二个表中使用该序列号。显然在这种情况下,您可以简单地将is_public添加到第一个表中,但是如果您有一个复合键的链接列表,则需要知道返回的序列值。
人们通常如何处理这个问题?他们是否使用与数据库交互的系统从插入中获取返回类型?
答案 0 :(得分:2)
这种方法的一种方法是:
INSERT...
SELECT lastval()
INSERT...
INSERT到第一个表中,使用lastval()
获取“最近使用nextval
获取任何序列的值”(在当前会话中),然后使用该值构建下一个INSERT
可选的RETURNING子句使INSERT根据实际插入的每一行计算和返回值。这主要用于获取默认提供的值,例如序列号。
使用INSERT ... RETURNING id
基本上将上面的前两个步骤合并为一个,所以你可以这样做:
INSERT ... RETURNING id
INSERT ...
其中第二个INSERT将使用从第一个INSERT返回的id
。