Mysql---视图

      

一、mysql视图

1.1 视图基础

1) 视图介绍(什么是视图)

视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表。

视图是一张虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。

同真实表一样,视图包含一系列带有名称的列和行数据

数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。

使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

2) 视图的优点(为什么要使用视图)

简单

用户无需关心视图中的数据如何查询获得的

视图中的数据已经是过滤好的符合条件的结果集

安全:用户只能看到视图中的数据

数据独立

一旦视图结构确定,可以屏蔽表结构对用户的影响

                                                                                                                                                                                        

创建视图的语法格式

create  view  库.视图名称  as  SQL查询;
create  view  库.视图名称(字段名列表) as  SQL查询;

例子

mysql> create database  viewdb;	
mysql> create view viewdb.v1 as  select name , uid  from tarena.user  ;

mysql> create view viewdb.v2(姓名,家目录,登录状态) as
       -> select name,homedir,shell from tarena.user;

mysql> use tarena;
mysql> create view emp_view  as
    ->   select name, email, dept_name
    ->   from employees as e  inner join departments as d
    ->   on e.dept_id=d.dept_id;

//查看结构
desc  tarena.emp_view;
desc viewdb.v1;
desc viewdb.v1;

// 查询视图中的数据
mysql> select  * from  viewdb.v1;
mysql> select  * from  viewdb.v2;
mysql> select * from tarena.emp_view;

查看视图

use   viewdb;
查看当前库里哪些表是视图
mysql> show table status  where  comment = "view" \G      
Comment: VIEW

查看视图表里的数据是从哪个基表获取的

mysql> show create view viewdb.v1 \G
*************************** 1. row ***************************
                View: v1
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `tarena`.`user`.`name` AS `name`,`tarena`.`user`.`uid` AS `uid` from `tarena`.`user`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

操作视图 select  insert  update  delete 

当对视图里的数据做 insert    、update  、 delete  ,

对应的基本数据也会跟着改变,反之亦然

mysql> select * from  viewdb.v1 where uid is null ;
mysql> delete from  viewdb.v1 where uid is null ;
mysql> select * from  tarena.user where uid is null ;

查看基本里的数据

mysql> select * from  tarena.user where uid is null ;
mysql> select count(*) from tarena.user;
mysql> select name from  tarena.user where name="nb";
mysql> select * from viewdb.v1 where name="nb2";

删除已有视图

mysql> drop table viewdb.v1;
ERROR 1051 (42S02): Unknown table 'viewdb.v1'
mysql> 
mysql> drop  view viewdb.v1;   #使用删除视图的命令drop view  

视图进阶

设置查询语句中的字段别名(select 命令查询的表里有同名的字段时)

create  table  tarena.t3  select name,uid from tarena.user limit 3;

create  table  tarena.t4  select name,shell from tarena.user limit 5;
 
mysql> use  tarena;
mysql> create view v3 as select * from 
t3 inner join t4 on  t3.name = t4.name; 报错

定义别名

mysql> create view v3 as select t3.name as username , t4.name as 姓名  
from  t3 inner join t4 on  t3.name = t4.name;

mysql> select  * from  v3; 

覆盖的方式创建视图 (达到修改已有视图的目的)

mysql> create view  viewdb.v2 as select name,uid,gid from tarena.user;
ERROR 1050 (42S01): Table 'v2' already exists

mysql> create or replace view  viewdb.v2 as select name,uid,gid from tarena.user;
Query OK, 0 rows affected (0.04 sec)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值