以下内容适用于Mysql 5.6.40,但不适用于5.7.20:
create table test
select 1 as id, 'a' as data;
create or replace view v_test as
select t.* from test t
left join test t1 using (id); -- doesn't have to be the same table, only used for simplicity
update v_test set data = 'b';
第1行的错误1288(HY000):UPDATE的目标表v_test为 不可更新
左连接部分似乎是引发错误的原因。但是,更新是在联接的左侧完成的,因此不应有任何理由禁止这样做。此外,以下作品:
create or replace view v_test_ as
select t.* from test t
join v_test using (id);
update v_test_
set data = 'b';
这意味着mysql实际上可以使用左连接来处理查询。是否有充分的理由拒绝更新,或者是文档的顽固支持者只是因为左联接是“外部”而添加了例外?