使用串行数据类型作为外键

时间:2011-08-31 21:25:18

标签: postgresql

让我们说我有两张桌子。

第一个是:表列表,包含list_id SERIAL,list_name TEXT

第二个表格通常是一个表,表明列表是否公开:list_id INT,is_public INT

显然是一个人为的案例,但我正在计划一些表格,这似乎是一个问题。如果我在表列表中插入一个新的list_name,那么它会给我一个新的序列号......但现在我需要在第二个表中使用该序列号。显然在这种情况下,您可以简单地将is_public添加到第一个表中,但是如果您有一个复合键的链接列表,则需要知道返回的序列值。

人们通常如何处理这个问题?他们是否使用与数据库交互的系统从插入中获取返回类型?

1 个答案:

答案 0 :(得分:2)

这种方法的一种方法是:

INSERT到第一个表中,使用lastval()获取“最近使用nextval获取任何序列的值”(在当前会话中),然后使用该值构建下一个INSERT

还有INSERT ... RETURNING

  

可选的RETURNING子句使INSERT根据实际插入的每一行计算和返回值。这主要用于获取默认提供的值,例如序列号。

使用INSERT ... RETURNING id基本上将上面的前两个步骤合并为一个,所以你可以这样做:

  • INSERT ... RETURNING id
  • INSERT ...

其中第二个INSERT将使用从第一个INSERT返回的id