2011-08-31 48 views
2

可以說我有兩個表。使用串行數據類型作爲外鍵

第一個是:表列出,與LIST_ID SERIAL,LIST_NAME TEXT

第二個表,平凡,一個表,說,如果名單是公開的:LIST_ID INT,is_public INT

顯然有點一個人爲的案件,但我正在計劃一些表格,這似乎是一個問題。如果我在表列表中插入一個新的list_name,那麼它會給我一個新的序列號......但現在我需要在第二個表中使用該序列號。顯然,在這種情況下,可以簡單地將is_public添加到第一個表中,但在鏈接列表中存在複合鍵的情況下,您需要知道返回的序列值。

人們通常如何處理這個問題?他們是否使用與數據庫交互的任何系統從插入中獲取返回類型?

回答

2

一種方法來這樣的事情是:

插入第一表,使用lastval()獲得「最看重的最近獲得與nextval任何序列「(在當前會話),然後使用該值來建立你的n ext INSERT。

還有INSERT ... RETURNING

可選的RETURNING子句將導致INSERT來計算,並根據每行返回值(一個或多個)實際上插入。這主要用於獲取默認值提供的值,例如序列號。

使用INSERT ... RETURNING id基本上結合了前兩個步驟上面爲一個,這樣你會怎麼做:

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

其中第二INSERT將使用id從返回第一個INSERT。

+0

華麗,謝謝 –