我正在阅读MySQL中的Updateable View
:
更具体地说,如果视图包含任何视图,则视图不可更新 以下:....
某些加入(请参阅本节后面的其他加入讨论)
之后:
有时候多表视图可以更新, 假设它可以使用MERGE算法进行处理。为了这 要工作,视图必须使用内连接(不是外连接或 联盟)。
但是没有明确的例子,我没有成功更新我创建的涉及NATURAL JOIN
的视图。
依赖于multi-tables
可视更新的视图示例是什么?什么时候不呢?
答案 0 :(得分: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 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'