mysql视图
一、视图概念
数据库中的视图是一个虚拟表。同真实的表一样,视图包含系系列带有名称的行和列数据。行和列数据来自于由定义视图查询所引用的表,并且在引用视图时动态生成。
二、在单表上建立视图
1、首先创建基本表并插入数据
create table t(
quantity int,
price int
);
insert into t values(3,50);
2、创建视图:
create view view_t as select quantity,price,quantity*price from t;
create view view_t2(qty,price,total) as select quantity,price,quantity*price from t;
3、查看视图中的数据
select * from view_t;
select * from view_t2;
三、在多表上创建视图
1、先创建表和插入数据
create table student(
s_id int,
name varchar(40)
);
create table stu_info(
s_id int,
glass varchar(40),
addr varchar(90)
);
insert into student values(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai');
insert into stu_info values(1,'wuban','henan'),(2,'liubab','hebei'),(3,'qiban','shandong');
2、创建视图stu_glass
create view stu_glass(id,name,glass) as select student.s_id,student.name,stu_info.glass
from student,stu_info where student.s_id=stu_info.s_id;
四、 查看视图
1、使用DESCRIBE
语句查看视图的基本信息
语法:DESCRIBE 视图名
DESCRIBE
一般情况下都简写成desc
查看视图view_t的定义
2、使用SHOW TABLE STATUS
语句查看视图的基本信息
语法: show table status like '视图名';
执行结果显示,Comment的值为VIEW,说明该表为视图;其他信息为NULL,说明这是一个虚表。用同样的语句可以查看数据表t的信息,执行结果如下:
从查询的结果来看,这里的信息包含存储引擎、创建时间等,Comment信息为空,这就是视图和表的区别。
3、使用SHOW CREATE VIEW
语句查看视图的详细信息
语法:show create view 视图名
执行结果显示视图的名称、创建视图的语句等信息。
五、修改视图
修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图保持与基本表的一致性。Mysql中通过create or replace view
语句和alter
语句来修改视图
1、使用create or replace view
语句修改视图
首先通过desc
查看修改之前的视图,方便比较
create or replace view view_t as select * from t;
从执行结果来看,相比原来视图view_t,新的试图少了一个字段。
2、使用alter
语句修改视图view_t
alter view view_t as select quantity from t;
六、更新视图
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,所以其中没有数据。通过视图更新的时候都是转到基本表上进行更新的,对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
1、使用UPDATE
语句更新视图view_t
update view_t set quantity=5;
更新之前先查看基本表和视图的信息
执行更新并查看视图和基本表的内容
对视图view_t更新后,基本表t的内容也更新了。同样,当对基本表t更新后,另一个视图view_t2的内容也会更新。
2、向视图插入数据
insert into t values(3,5);
向表t中插入一条记录,通过select语句查看表t和视图view_t2,可以看到其中的内容也跟着更新,试图更新的不仅仅是数量和单价,总价也会更新。
3、注意
当视图中包含一下内容时,视图的更新操作将不能被执行:
- 视图中不包含基本表中被定义为非空的列。
- 在定义视图的
select
语句后的字段列表中使用了数学表达式 - 在定义视图的
select
语句后的字段列表中使用了聚合函数。 - 在定义视图的
select
语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING
字句。
七、删除视图
删除stu_glass视图
drop view if exists stu_glass;
可以看到,stu_glass视图已经不存在,删除成功。
- 点赞
- 收藏
- 关注作者
评论(0)