根据MariaDB文档,视图不能具有可更新的外部联接:
如果视图使用下列任何一项,则不能用于更新:.外连接..。
据我所知,“外联接”包括“左联接”和“右联接”,对吗?但是当我测试它(在mariaDB版本10.1.25中)时,它是可更新的!我在这里错过了什么?
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;发布于 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中。
https://stackoverflow.com/questions/46036984
复制相似问题