你对key_preserved table理解有误
什么是键值保存表?
如果基表的每条记录在视图结果中最多出现1次(或者不出现,即不会重复),那么该基表就是键值保存表。
继续用你的脚本
INSERT INTO test2 VALUES(2,3.9);
这时select * from test_view3 where col1=2,返回如下两条数据
2,1.2,2.2
2,1.2,3.9
其中test2才是key_preserved table。所以只能修改col3字段
可以试想,如果执行UPDATE test_view3 a SET col2 = 1.3 WHERE a.col3 = 2.2;这样的语句成功
基表test2中col2被修改,那 视图中2,1.2,3.9这条数据如何显示,update语句没有修改col3=3.9的数据,但是这条数据中col2已经被修改。
所以只能修改key_preserved table