依赖于多个表的可更新视图

Posted

技术标签:

【中文标题】依赖于多个表的可更新视图【英文标题】:Updateable view dependent on mutiple tables 【发布时间】:2013-04-15 09:46:15 【问题描述】:

我正在阅读mysql 中的Updateable View

更具体地说,如果视图包含任何 以下:....

某些加入(请参阅本节后面的其他加入讨论)

然后:

有时可以更新多表视图, 假设它可以用 MERGE 算法处理。为了这 要工作,视图必须使用内连接(不是外连接或 联盟)。

但是没有明确的例子,我没有成功更新我创建的涉及NATURAL JOIN 的视图。

依赖于可更新的multi-tables 的视图示例是什么?什么时候不呢?

【问题讨论】:

【参考方案1】:

示例表架构

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'

【讨论】:

以上是关于依赖于多个表的可更新视图的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 5/6 中的可更新视图

mysql-视图

带有空 UIScrollView 的可滚动内容大小歧义(XCode 6)

iOS - 在一台设备上支持多个用户帐户的应用中的可更新应用内购买

性能优化懒懒加载懒动画 --- 基于window滚动事件来实时更新DOM的视图状态,以表明是否在规定的可视区,并作有change回调

如何在 eloquent 中执行依赖于表的最后一行的更新和保存操作?