Dai Chong's blog

 上篇简单的介绍了视图的概念,那么这篇将告诉大家如何创建、修改、删除视图,也就是视图的基本操作了!

一、在单表上创建视图

1
2
3
4
5
6
7
8
# 创建表 user
create table user (id int,name varchar(10),age tinyint(3));
# 插入数据
insert into user values(1,'张三',20),(2,'李四',20);
# 创建视图-并计算他们两年之后多少岁
create view view_user as select id,name,age+2 as age from user;
# 第二种写法
create view view_user_1(user_id,user_name,user_age) as select id,name,age from user;


得到结果:
idnameage
1张三22
2李四22
3王二22

user_iduser_nameuser_age
1张三22
2李四22
3王二22

从这两种写法可以看出,在视图上是可以使用计算的,虽然两个视图中字段名不同,但数据确实相同的。因此在使用视图的时候,用户根本接触不到实际表中的结构和数据,从而保证了数据库的安全。

二、在多表上创建视图
1
2
3
4
5
6
7
8
# 创建表 user、school
create table user (id int, name varchar(10), age tinyint(3), school_id int);
create table school (id int, name varchar(10));
# 插入数据
insert into user values(1,'张三',20,1),(2,'李四',20,2);
insert into school values(1,'清华'),(2,'北大');
# 创建视图
create view view_user_school(user_id,user_name,user_school) as select user.id,user.name school.name from user,school where user.school_id = school.id;

通过视图看到的结果:
user_iduser_nameuser_school
1张三清华
2李四北大

三、查看视图

1
desc 视图名;

通过这个命令可以看出视图的字段定义、字段的数据类型、是否为空、是否为主键/外键、默认值和额外信息。
1
select table status like '视图名';

通过这个命令可看出存储引擎、创建时间、Comment。
1
show create view '视图名';

通过这个命令可以看出视图的名称、创建视图的语句等信息。

四、修改视图

1
create or replace view view_user as select id,user,name,age from user;

1
alert view view_user as select id,user,name,age from user;

五、更新视图

1
2
update view_user set age=100 where id=1;
delete from view_user where id=1;

当视图更新的时候相对应的基础表也会被更新,但如果是多表创建、使用了计算或者是聚合函数都是无法修改/删除成功的,并且会报错。

六、删除视图

1
drop view if exists view_user;

总结:

 1.两者的区别

  (1) 视图是已经编译好的sql语句,是基于sql语句的结果集形成的可视化表,而表不是。
  (2) 视图没有实际的物理记录,而表有。
  (3) 表是内容,视图是窗口。
  (4) 表占用物理空间而视图不占用。
  (5) 视图是查看数据表的一种方法,从安全角度上来说视图可以防止用户接触到数据表,使用户不知道表结构。
  (6) 表属于全局模式中的表,是实表,视图是局部模式的表,是虚表。
  (7) 视图的简历和删除只会影响到视图的本身,不影响对应表的基本数据。

 2.两者的关系

  (1) 视图是建立在基本表纸上的表,它的结构都来源于基本表。无基本表视图将无法建立,视图是基本表的抽象和在逻辑意义上建立的新关系。


 评论