2013-04-15 37 views
1
更新視圖

我在MySQL唸叨Updateable View依賴於多發表

更具體地講,一個觀點是,如果它包含任何 以下的不可更新:....

某些連接(見本節後面的額外加入討論)

而在這之後:

假設可以使用MERGE算法處理多表視圖,多表視圖有時可以更新, 。爲使此 正常工作,視圖必須使用內部聯接(不是外部聯接或聯合)。

但沒有明確的例子,我沒有成功更新我創建的視圖,涉及NATURAL JOIN

取決於可更新的multi-tables的視圖示例是什麼?什麼時候不?

回答

3

樣品表模式

CREATE TABLE customers(customer_id INT, `name` VARCHAR(32)); 
CREATE TABLE orders(order_id INT, customer_id INT, order_date DATE); 

視圖

CREATE VIEW vw_orders AS 
SELECT order_id, o.customer_id order_customer_id, c.customer_id, c.name customer_name, order_date 
    FROM orders o INNER JOIN 
     customers c ON o.customer_id = c.customer_id; 

然後你就可以將這樣的

INSERT INTO vw_orders (customer_id, customer_name) VALUES (1, 'Customer1'); 
INSERT INTO vw_orders (order_id, order_customer_id, order_date) VALUES (1, 1, CURDATE()); 

或UPDATE

UPDATE vw_orders SET customer_name = 'Customer11' WHERE customer_id = 1; 

注:您將無法既基礎表中有一條語句

本聲明

INSERT INTO vw_orders (customer_id, customer_name, order_id, order_customer_id, order_date) 
VALUES (2, 'Customer2', 2, 2, CURDATE()); 

會失敗,錯誤

Can not modify more than one base table through a join view 'vw_orders' 
插入或更新值