视图
通过对视图的操作不仅可以实现查询的简化,而且还会提高安全性
视图:
本质是一种虚拟表,其内容和真实表相似,包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储数据值的形式存在。行和列数据来自定义视图的查询所引用基本表,并且在具体引用视图时动态生成。
视图使程序员只关心感兴趣的某些特定数据和他们所负责的特定任务。这样程序员只能看到视图所定义的数据而不是视图所引用表中的数据。从而提高了数据库中数据逇安全性。
特点:
1、视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系
2、视图由基本表(实表)产生的表(虚表)
3、视图的建立和删除不影响基本表
4、对视图内容的更新(添加,删除,修改)直接影响基本表
5、当视图来自多个表时,不允许添加删除数据(这个应该好理解,因为牵涉到了多个表,显然删除,添加都是不方便的或者说不安全的)
创建
create view viewname
例:
create table t_product(
id int,
name varchar(20),
price float
)
//创建视图
create view view_product as select id,product from t_product
失败了,原来定义成了name,改一下属性
alter table t_product change name product varchar(20);
再次创建视图,OK
select * from view_product
OK,这样就将price字段隐藏了。
视图大家庭
由于视图实际上是封装查询语句(可以想到吧),那么是不是任何形式的查询语句都可以封装成视图?
查询视图
常量查询:
create view view_const as select 3.1415926;
聚合函数(COUNT MIN SUM MAX等)
create view view_fun as select count(name) from t_student
排序(ORDER BY)
CREATE VIEW view_order as select name from t_student order by id DESC
内连接查询语句
create view view_join
as
select s.name
from t_student as s,t_group as g
where s.group_id=g.id and g.id=2
外连接(left join 和 right join)
create view view_left
as
select s.name
from t_student as s left join t_group as g on s.group_id=g.id
where g.id=2
子查询
create view view_child
as
select s.namefrom t_student as swhere s.group_id in (select id from t_group)
记录联合(union 和 union all)
create view view_union
as
select id,name from t_student
union all
select id,name from t_group
查看视图
show tables ,show table status(由于view是一个特殊的表,所以查看表也就可以查看到view), show create view viewname
1、show table status like "view_product"\G
以上面创建的view_product为例
2、show create view view_product\G
查看视图的定义
3、describe|desc
desc viewname
删除视图
drop viewname[,viewname,...]
可以一次删除多个view
修改视图
1、create or replace view view_name
以view_product为例现在想要隐藏id字段。
a、可以先删除视图,重新创建一个视图
b、create or replace view viewname as
如:create or replace view view_product as select id from t_product
这样就不需要先删除在创建
2、alter语句(猜着就有)
alter view viewnameas 查询语句