首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左联接视图是否可以更新?

问左联接视图是否可以更新?
EN

Stack Overflow用户
提问于 2017-09-04 12:23:04
回答 1查看 712关注 0票数 2

根据MariaDB文档,视图不能具有可更新的外部联接:

如果视图使用下列任何一项,则不能用于更新:.外连接..。

据我所知,“外联接”包括“左联接”和“右联接”,对吗?但是当我测试它(在mariaDB版本10.1.25中)时,它是可更新的!我在这里错过了什么?

代码语言:javascript
复制
DROP TABLE IF EXISTS t1,t2;

CREATE TABLE t1(id INT, a TEXT);
INSERT INTO t1(id,a) VALUES (1,'a'),(2,'b'),(3,'c');

CREATE TABLE t2(id INT, b TEXT);
INSERT INTO t2(id,b) VALUES (1,'+'),(1,'-'),(2,'*');

CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1 LEFT JOIN t2 USING(id);

#UPDATE v1 SET a='x' WHERE id=3; # worked
#UPDATE v1 SET a='y' WHERE b IS NULL; # worked
#UPDATE v1 SET b='y' WHERE b IS NULL; # worked! even so, it does not make sense and does not update anything

SELECT * FROM t1;
SELECT * FROM t2;
EN

回答 1

Stack Overflow用户

发布于 2017-09-04 14:01:27

ChangeLogs中的一些条目。(这对评论来说太长了,也许答案就隐藏在其中一个链接中。)

- 2015-08-03 5.7.8释放候选人-- Bugs固定

如果将视图的多表更新( /doc/refman/5.7/en/update.html )(在SET和JOIN子句中使用相同的列)用作准备语句,则可能会引发断言。(Bug #76962,Bug #21045724) http://bugs.mysql.com/bug.php?id=76962

- 2015-03-09 5.7.6里程碑16 --优化笔记

要处理派生表( FROM子句中的子查询)或视图引用,. mysql> SET optimizer_switch = 'derived_merge=off'; . http://bugs.mysql.com/bug.php?id=59203

- 2015-06-04 MariaDB 10.1.5及2015-05-07 MariaDB 10.0.18及2015-05-01 MariaDB 5.5.43

MDEV-7613 : MariaDB 5.5.40服务器在update表中与视图http://localhost/kb/en/mariadb-5540-release-notes/左联接

-2009年-12-07 5.5.0里程碑2和2009-10-06 5.1.40 -固定的臭虫

涉及自然连接和可合并视图的多表更新( http://dev.mysql.com/doc/refman/5.5/en/update.html )会引发断言.(Bug #47150) http://bugs.mysql.com/bug.php?id=47150

注意: 5.5比MariaDB 10.1早,修复应该包括在内;5.7是在后面,所以它不会在10.1中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46036984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档