2010-06-23 58 views
0

哦,天哪!
我有兩個表,第一個(我們稱之爲NameTable)預置了一組值(id,名稱),第二個(ListTable)是空的,但具有相同的列。
現在的問題是:如何將ListTable中的值從NameTable中插入?因此,如果我在NameTable中更改一個名稱,那麼自動更新ListTable中的值。
有沒有插入這個或是否必須以某種特殊的方式創建表?
嘗試瀏覽手冊,但沒有成功:(PostgreSQL:動態行值(?)

+0

你打算修改「奴隸」表嗎?你確定你不需要一個VIEW? – leonbloy 2010-06-23 20:19:21

回答

0

嗯......我有點困惑,究竟你想要做什麼或爲什麼,但這裏有一些指向你可能想要採取的事情看看:表繼承,觸發器和規則

postgresql中的表繼承允許一個表共享另一個表的數據,所以,如果你添加一行到基表,它不會顯示在但是如果向繼承的表添加一行,它現在將顯示在兩個表中,並且任一位置的更新都會在兩個表中反映出來。

觸發器允許您設置c在插入,更新或刪除操作發生在表上時將運行的ode。這將允許您添加手動描述的行爲。

規則允許您設置一個規則,該規則將在滿足特定條件時用替代查詢替換匹配查詢。

如果你描述你的問題進一步在你爲什麼要這樣的行爲,可能更容易提出正確的方式去了解的東西:-)

+0

對不起,用我低劣的英語和SQL技能解釋有點困難:P但基本上在僞SQL中它會像這樣: INSERT INTO table1(name)VALUES(SELECT name FROM table2 WHERE id = 1) 那麼當您更改table2中的名稱時,table1中的名稱也會更改。我認爲繼承可能是這樣的方式? – Seerumi 2010-06-23 11:03:19

+0

是的,它絕對是最優雅的解決方案。 – kasperjj 2010-06-23 11:29:57

1

的建議使用INSERT ... SELECT是最好的用於在同一數據庫中的表之間移動的方法。

但是,還有另一種方法來處理自動更新要求。

這聽起來像這些都是你的標準:

  • 表A與列(X,Y)
  • (X,Y)是獨特
  • 表B還與列定義(定義X,Y)
  • 表A是表B
  • 表B的超集是用來裝載從表A的數據和需要與更新要保持同步於表A.

這是與選項ON UPDATE CASCADE外鍵的工作:

ALTER TABLE B ADD FOREIGN KEY (x,y) REFERENCES A (x,y) ON UPDATE CASCADE; 

現在,不僅會在表A的更新自動更新表B,表B是對含有保護(X ,y)對不在表A中。如果希望記錄從表B中自表B刪除時自動刪除,請添加「ON UPDATE DELETE」。