Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 依赖于多个表的可更新视图_Mysql_Sql_Join_View - Fatal编程技术网

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

Mysql 依赖于多个表的可更新视图,mysql,sql,join,view,Mysql,Sql,Join,View,我正在以下网站上阅读有关可更新视图的信息: 更具体地说,如果视图包含 以下: 某些联接参见本节后面的附加联接讨论 在那之后: 多表视图有时可能是可更新的, 假设可以使用合并算法处理它。为此 要工作,视图必须使用内部联接,而不是外部联接或外部联接 工会 但是没有明确的例子,我也没有成功地更新我创建的涉及自然连接的视图 依赖于可更新的多个表的视图的示例是什么?什么时候不是?示例表模式 CREATE TABLE customers(customer_id INT, `name` VARCHAR(32)

我正在以下网站上阅读有关可更新视图的信息:

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

某些联接参见本节后面的附加联接讨论

在那之后:

多表视图有时可能是可更新的, 假设可以使用合并算法处理它。为此 要工作,视图必须使用内部联接,而不是外部联接或外部联接 工会

但是没有明确的例子,我也没有成功地更新我创建的涉及自然连接的视图

依赖于可更新的多个表的视图的示例是什么?什么时候不是?

示例表模式

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());
将因错误而失败

无法通过联接视图“vw_orders”修改多个基表 示例表模式

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());
将因错误而失败

无法通过联接视图“vw_orders”修改多个基表