简单的说,视图是一张虚拟表,可以加快查询速度。
创建视图:CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
修改视图:CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
视图条件限制:[WITH CHECK OPTION]
视图的操作方式用实例来说明。
新建表user_first,user_product:
![](https://img.haomeiwen.com/i6011613/61aa02a88ebd5f65.png)
![](https://img.haomeiwen.com/i6011613/1f9a29e40be52723.png)
创建视图user_info,user_simple_info:
![](https://img.haomeiwen.com/i6011613/b3ec665b84ea583c.png)
![](https://img.haomeiwen.com/i6011613/13700e7f58bea4dc.png)
user_simple_info 视图是user_first的子集,user_info是通过user_id关联的视图。
1.视图的SELECT的使用:
与表的查询方式一致,如:
SELECT a.user_a,a.user_b from user_info a
![](https://img.haomeiwen.com/i6011613/2d3497486861188a.png)
2.视图的INSERT的使用:
(1)视图为表的子集:
INSERT into user_simple_info(user_n,user_a) VALUES("插入",108)
视图数据为:
![](https://img.haomeiwen.com/i6011613/fb2f9b8b6751be09.png)
表数据也同时跟新:
![](https://img.haomeiwen.com/i6011613/1e1f4c982a254ab5.png)
(2)视图为多表关联:
INSERT into user_info(user_n,user_a,user_b) VALUES("插入",108,"化学")
插入时报错:[Err] 1471 - The target table user_info of the INSERT is not insertable-into
无法插入!
3.视图的UPDATE的使用:
子集视图不再演示,可以更新。
多表关联视图:
更新一张表的数据:
UPDATE user_info a SET a.user_a = 999 WHERE a.user_b = '语文'
![](https://img.haomeiwen.com/i6011613/80e4bd6d14387f84.png)
发现视图更新了2条,原因是更新语文这个数据时,user_a来自于同一张表中的同一个数据,数据源改变,导致修改了两条。
更新两张表的数据:
UPDATE user_info a SET a.user_a = 999,a.user_b="haha"
![](https://img.haomeiwen.com/i6011613/34a44c3c81b2d8cb.png)
发现无法修改!
4.视图的DELETE的使用:
(1)视图为表的子集:
DELETE from user_simple_info WHERE user_n = '33'
删除后视图数据:
![](https://img.haomeiwen.com/i6011613/dc2067430888811c.png)
删除后表数据:
![](https://img.haomeiwen.com/i6011613/8aedfc719048e7fe.png)
可见视图数据删除可以影响表,这前提是视图字段是表的子集。
(2)视图为多表关联:
DELETE from user_info WHERE user_n = '22'
![](https://img.haomeiwen.com/i6011613/d35b87249e4f9d6b.png)
无法删除!
上面是简单的对视图进行增删改查,多表关联后的视图,一般操作无法完成。对表的子集的视图可以增删改查。如果对视图操作成功,会影响对应表。一般要修改数据的话,可以直接操作表,从而来改变视图数据。
网友评论