MySQL视图是一种只读的查询表的对象,它的结构和数据内容都是从一组关联表派生出来的,它提供了一种方便处理和读取复杂查询的结果的方法。但是MySQL视图只能读取数据,无法执行CURD操作,如果要更新数据,就需要从该视图及其关联表中找出更新目标表,然后更新数据,本文将介绍如何在MySQL视图中更新数据。
首先,要找出从MySQL视图及其关联表通向目标表的路径,把这个路径看作一个查询,把目标表作为查询的末端,视图和关联的表作为查询的中间部分,如下所示:
SELECT T1.col1,T2.col2,T3.col3
FROM ViewName V
LEFT JOIN table1 T1 ON V.col1 = T1.col1
LEFT JOIN table2 T2 ON T1.col2 = T2.col2
LEFT JOIN table3 T3 ON T2.col3 = T3.col3
WHERE T3.col4 = 'target value';
在上面的查询中,ViewName就是视图名,table1,table2,table3是通向目标表的关联表,上面的查询只会返回target value,找出了路径之后,把这个查询语句改造一下就可以实现更新数据了,如下所示:
UPDATE table3 T3
SET T3.col4 = 'new value'
FROM ViewName V
LEFT JOIN table1 T1 ON V.col1 = T1.col1
LEFT JOIN table2 T2 ON T1.col2 = T2.col2
LEFT JOIN table3 T3 ON T2.col3 = T3.col3
WHERE T3.col4 = 'target value';
上面的查询中把SELECT改成了UPDATE,并且给目标表设置了新值,通过这样的查询可以实现在MySQL视图中更新数据,但是MySQL视图是只读的,所以如果更新的数据可能它的值会被覆盖,如果有更新数据的也需要在会话级别锁定记录,这样就可以确保数据不会被覆盖。
总而言之,以上就是我们如何在MySQL视图中更新数据的过程,如果想要更新数据库视图的数据,就要找出视图及其关联表之间的路径,然后把这个路径改造为更新操作,再加上会话级别的锁定,这样就可以安全的更新视图的数据。