视图的学习

简单的说,视图是一张虚拟表,可以加快查询速度。
创建视图:CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
修改视图:CREATE OR REPLACE VIEW 视图名 AS SELECT [...] FROM [...];
视图条件限制:[WITH CHECK OPTION]

视图的操作方式用实例来说明。
新建表user_first,user_product:


视图的学习_第1张图片
user_first.png

视图的学习_第2张图片
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
视图的学习_第3张图片
image.png

2.视图的INSERT的使用:
(1)视图为表的子集:

INSERT into user_simple_info(user_n,user_a) VALUES("插入",108)

视图数据为:


视图的学习_第4张图片
image.png

表数据也同时跟新:


视图的学习_第5张图片
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 = '语文'
视图的学习_第6张图片
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

无法删除!

上面是简单的对视图进行增删改查,多表关联后的视图,一般操作无法完成。对表的子集的视图可以增删改查。如果对视图操作成功,会影响对应表。一般要修改数据的话,可以直接操作表,从而来改变视图数据。

你可能感兴趣的:(视图的学习)