视图的定义:视图是从基本表中导出来的表,是一种虚拟存在的表,基于真实的基础 表,它的结构和数据也依赖于基本表,可以像操作基本表一样,例如查询,修改,删除。
视图的优点:
1.简化查询语句。
2.安全性。
3.逻辑数据独立性
视图的管理:
创建视图的语法格式:
create view view_name as select_statement
注意:视图是属于数据库的,所有在创建视图的时候要选择一个数据库,如果已经use database,则在当前数据库创建视图,如果没有use database 那么创建视图的时候我们就需要将视图名指定为databasename.view_name。
1.在单表上创建视图:
案例:基于student表创建一个名字为view_stu的视图.
*第一步:*创建一个数据库为chapter07,并选择使用该数据库。
create database chapter07;
使用chapter07数据库。
use chapter07;
第二步:在数据库里创建一个student基本表,并添加数据。
create table student(
s_id int(3),
name varchar(20),
math float,
chinese float
);
向表中插入数据:
insert into student (s_id,name,math,chinese) values (1,"tom",80,78);
insert into student (s_id,name,math,chinese) values (2,"jack",70,80);
insert into student (s_id,name,math,chinese) values (3,"lucy",97,95);
第三步:创建一个view_stu视图,显示math,Chinese,math+chinese信息。
create view view_stu as select math,chinese,math+chinese from student;
查看视图数据:
select * from view_stu;
案例:创建一个view_stu2的视图,自定义字段名称。
create view view_stu2 (math,chinese,Sum)
as
select math,chinese,math+chinese
from student;
2.在多表上创建视图:
案例:在student表和stu_info表上创建一个stu_class视图,查询出s_id号,姓名,班级。
第一步:由于student表前面已创建,这里只创建stu_info表,并插入数据。
create table stu_info(
s_id int(3),
class varchar(50),
addr varchar(100)
);
向表中插入数据:
insert into stu_info (s_id,class,addr) values (1,"2班","安徽");
insert into stu_info (s_id,class,addr) values (2,"3班","重庆");
insert into stu_info (s_id,class,addr) values (3,"1班","山东");
第二步:创建stu_class视图,查询出s_id号,姓名,班级。
create view stu_class (id号,姓名,班级)
as
select student.s_id,student.name,stu_info.class
from student,stu_info
where student.s_id=stu_info.s_id;
查看视图:
1.使用describe语句查看数据。可以查看视图的字段名,字段类型等信息。
语法格式:
describe 视图名;或者desc 视图名;
案例:查看stu_class视图。
desc stu_class;
2.使用show table status 语句查看视图。
语法格式:
show table status like “视图名”;
案例:查看stu_class视图。
show table status like "stu_class"\G;
3.使用show create view 查看视图。可以查看创建过程和视图的字符编码。
语法格式:
show create view 视图名;
案例:查看stu_class视图。
show create view stu_class\G;
修改视图:
1.使用 create or replace view 语句修改视图
语句格式:
create [or replace] view 视图名 as select statement
案例:修改view_stu视图。
create or replace view view_stu
as
select * from student;
2.使用alter 语句修改视图
语句格式:
alter view 视图名 as select_statement;
案例: 修改view_stu视图。
alter view view_stu as select chinese from student;
更新视图:
1.使用update 语句更新视图
案例:更新视图中chinese字段的值为100.
update view_stu set chinese=100;
2.使用insert 语句更新视图。
案例:插如name=lily的相关数据。
insert into student values (4,"lily",100,100);
3.使用delete 语句更新视图。
案例:使用delete删除math值为70的一条数据。
delete from view_stu2 where math=70;
注意事项:尽管更新视图有多种方式,但是并非所有情况下都能执行视图的更新操作。当视图中 包含以下内容时,视图的更新操作将不能执行。
1.视图中包含基本表中被定义为非空的列。
2.在定义视图的select语句后的字段列表中使用了数学表达式。
3.在定义视图的select语句后的字段列表中使用了聚合函数。
4.在定义视图的select语句中使用了distinct,union,top,group by 或者 having子句。
删除视图:
使用drop view 删除视图。
语法结构:
drop view [if exists] 视图名[,视图名] [restrict|cascade];
案例:删除view_stu2视图
drop view view_stu2;