2011-03-31 79 views
0

有沒有辦法鏈接兩個表,所以當我改變基表時,視圖也會改變呢?類似的東西:如何創建視圖,以便在基表變更時也改變視圖?

CREATE TABLE t (qty INT, price INT); 

INSERT INTO t VALUES(3, 50); 

CREATE VIEW v AS SELECT * FROM t; 

SELECT * FROM v; 
+------+-------+ 
| qty | price | 
+------+-------+ 
| 3 | 50 | 
+------+-------+ 

ALTER TABLE t ADD COLUMN comm INT; 

SELECT * FROM t; 
+------+-------+------+ 
| qty | price | comm | 
+------+-------+------+ 
| 3 | 50 | NULL | 
+------+-------+------+ 

SELECT * FROM v; 
+------+-------+ 
| qty | price | 
+------+-------+ 
| 3 | 50 | 
+------+-------+ 

最後兩個SELECT-s應該是相等的。

PS。我知道MySQL說:

視圖定義在創建時是「凍結的」,所以後來對基礎表的更改不會影響視圖定義。

和創建觸發器也是不可能的,因爲觸發事件不包括ALTER TABLE

回答

1

你需要的時候你alter table來重新創建的視圖,manual

視圖定義說是「凍結「在 創建時間,所以更改爲 之後的底層表格不會影響視圖定義 。例如,對於 的例子,如果一個視圖被定義爲 SELECT *在一個表上,新列添加 到表中以後不會成爲 的視圖的一部分。

可以下降&重新創建視圖或ALTER視圖。

+0

是的,我知道。問題是:如何使它發生?我的意思是儘可能地堅實。 – 2011-03-31 16:05:54

+1

@wk:我不認爲這有一個自動方式約束。你必須照顧這一點 – 2011-03-31 16:08:26