简单的说,视图是一张虚拟表,可以加快查询速度。
创建视图:CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
修改视图:CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
视图条件限制:[WITH CHECK OPTION]
视图的操作方式用实例来说明。
新建表user_first,user_product:
user_first.png
user_product.png
创建视图user_info,user_simple_info:
user_simple_info.png
user_info.png
user_simple_info 视图是user_first的子集,user_info是通过user_id关联的视图。
1.视图的SELECT的使用:
与表的查询方式一致,如:
SELECT a.user_a,a.user_b from user_info a
image.png
2.视图的INSERT的使用:
(1)视图为表的子集:
INSERT into user_simple_info(user_n,user_a) VALUES("插入",108)
视图数据为:
image.png
表数据也同时跟新:
image.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 = '语文'
image.png
发现视图更新了2条,原因是更新语文这个数据时,user_a来自于同一张表中的同一个数据,数据源改变,导致修改了两条。
更新两张表的数据:
UPDATE user_info a SET a.user_a = 999,a.user_b="haha"
image.png
发现无法修改!
4.视图的DELETE的使用:
(1)视图为表的子集:
DELETE from user_simple_info WHERE user_n = '33'
删除后视图数据:
user_simple_info .png
删除后表数据:
user_first.png
可见视图数据删除可以影响表,这前提是视图字段是表的子集。
(2)视图为多表关联:
DELETE from user_info WHERE user_n = '22'
image.png
无法删除!
上面是简单的对视图进行增删改查,多表关联后的视图,一般操作无法完成。对表的子集的视图可以增删改查。如果对视图操作成功,会影响对应表。一般要修改数据的话,可以直接操作表,从而来改变视图数据。
网友评论