什么是视图?
为了提高复杂sql语句的复用性和安全性,mysql提供了视图的功能,视图本质上是一种虚拟表, 其内容和真实的表一样,包含一系列的带有名称的行和列数据,但是视图并不在数据库中以存储的数值形式存在,行和列来自自定义视图的查询所引用基本表,并在具体引用视图时动态生成。
视图的特性:视图的列可以来自不同的表,是表的抽和在逻辑意义上建立的新关系
视图是由基本表(实表)产生的表(虚表)
视图的建立和删除不影响基本表
对视图的内容的更新(增、删、该)直接影响基本表
视图来自多个基本表时,不允许添加和删除数据
视图的好处:
1、提高了重用性,就像一个函数。
2、对数据库重构,却不影响程序的运行。
3、提高了安全性能。可以对不同的用户,设定不同的视图。
让数据更加清晰。想要什么样的数据,就创建什么样的视图。
1、新建视图:
create view view_name as 查询语句
视图名不能和表名、其他视图名重名,视图实际上就是封装了复杂的查询语句.
视图名以v_或者view_开头
例如:
create view v_employee
as
select no, name, job, mgr, hiredate, comm, deptno from employee;
原来的基表(employee)中有sql字段,在创建视图中讲sal字段隐藏掉了。
查询视图:
select * from v_employee;
查询视图和查询表很相似,但是视图可以隐藏信息。
2、创建各类视图:
封装常量
create view view_const
as
select 3.1415;
封装聚合函数
create view view_function
as
select count(name) from dept;
封装order by
create view view_orderby
as
select name from dept order by deptno desc;
封装内连接
create view view_innerjoin
as
select dept.name from dept join employee on dept.deptno=employee.deptno;
外连接
create view view_leftjoin
as
select dept.name from dept left join employee on dept.deptno=employee.deptno;
3、查看视图:1、show tables
2、show table status
显示所有的表名和视图名
show table STATUS from 数据库名;
show table STATUS from 数据库名 like “v%”;
3、show create view 视图名;
4、desc 视图名;
4、删除视图:
drop view view_name;
5、修改视图:
因为视图是虚表,所以可以先删除后新建
create or replace view view_name
create or replace view v_employee AS select name from employee;alter view view_name as 查询语句
alter view v_employee as select job from employee;
6、利用视图操作基本表:
①查询数据
select * from 视图名;
②利用视图操作基本表
视图不仅可以查询数据,还可以进行更新。但是对视图的更新会反应到实际表中。但是需要注意:对视图进行添加、删除直接影响基本表
视图来自多个基本表,不允许添加和删除数据
插入:
insert into v_employee values
(7888, "sunny", "teacher", 7782, "1987‐04‐01", null,10);
此时基本表empolyee中就会新填一条数据。
删除:
delete from v_employee where no=7888;
删除从视图中添加的no为7888的这条数据。