7、MySQL数据库的视图操作

上一张内容在结尾阶段引入了MySQL数据库的视图概念,本章将纤细介绍视图的集中用法。在创建视图之前先创建学生表,学院表和学员信息表,通过使用视图对着三张表的操作,使我们对视图有一个基本的认识和了解。

使用视图的原则:

1、视图名字唯一性

2、视图的创建个数不受限制,用户可以创建多个视图

3、用户创建视图,必须从数据库管理员得到权限。

4、视图可以嵌套,

5、一些数据库管理系统禁止用户在查询语句中使用order by子句。

一、创建实用表数据

创建学生表

1
2
mysql>  create  table  studenginfo(sno  int (4) zerofill,sname  varchar (18),sex ENUM( '男' , '女' not  null  default  '女' ,address  varchar (48)  default  '北京' ,dno  int (3));
Query OK, 0  rows  affected (0.07 sec)

创建学院表

1
2
3
4
5
6
7
8
9
10
11
create  table  recruitinfo(address  varchar (18)  not  null ,score  float  not  null ,snum  int (3)  not  null );
Query OK, 0  rows  affected (0.08 sec)
mysql> show  create  table  department\G;
*************************** 1. row ***************************
        Table : department
Create  Table CREATE  TABLE  `department` (
   `dno`  int (2)  NOT  NULL ,
   `dname`  varchar (18)  NOT  NULL ,
   `dnum`  int (3)  NOT  NULL  DEFAULT  '0'
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8
1 row  in  set  (0.00 sec)

为学生表创建索引

1
mysql>  create  index  name_index  on  studentinfo (sname);

二、视图:

视图作为查询数据的另外一种形式,利用视图,用户可以集中、简化和定制数据库,同时提供了安全保证

视图是从一个或过个表中导出的表,其结构和数据是建立在对标的查询基础之上的。就本质而言,视图是一张虚表。

视图创建语法:

1
2
create  view  <view_name> [column1,column2...]  as
select  <column_name>  from  <tb_name>;

其中[column1,column2,...]为可选项,缺省是子查询结果中的字段名,select语句指明了视图中的字段机器数据。

强调:

1、视图创建后,只在数据字典中存放视图的定义,而其中的select语句并不执行

2、只有当用户对视图进行操作时,才按照视图的定义将数据从基本表中取出。

创建视图:

1、创建一个与studentinfo相同信息的视图

1
2
mysql>  create  view  studentinfo_view  as  select  from  studentinfo;
select  from  studentinfo_view;

2、为视图创建视图

1
mysql>  create  view  boy_view  as  select  from  studentinfo_view  where  sex= '男' ;

3、为列创建视图并查看其信息

1
mysql>  create  view  nameaddress_view  as  select  sname,address  from  studentinfo;

4、创建与表具有不同字段名的视图

1
2
mysql>  create  view  New_view(boy_name,boy_address)  as  select  sname,address  from  studentinfo  where  sex= '男' ;
Query OK, 0  rows  affected (0.00 sec)

5、利用视图简化表的复杂连接

创建一个关于学生信息表(studentinfo)、招生信息表(Recruitinfo)和Department的关联。

sname、dname和dnum三个字段。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql>  create  view  join_view  as  select  sname,dname,score  from  studentinfo s,department d,recruitinfo r  where  s.address=r.address  and  s.dno=d.dno;
Query OK, 0  rows  affected (0.00 sec)
mysql>  select  from  join_view;
+ -----------+--------------------+-------+
| sname     | dname              | score |
+ -----------+--------------------+-------+
| 张平      | 汽车系             | 648.5 |
| 李山      | 电子工程系         |   560 |
| 王彤      | 汽车系             | 654.5 |
| 张伟      | 计算机工程系       |   638 |
| 高守传    | 机械工程           |   650 |
| 刘红      | 工程物理系         | 629.5 |
| 张勇      | 应用数学系         |   625 |
| 刘晓      | 电子工程系         |   650 |
| 吴军      | 电子工程系         |   631 |
| 张大山    | 材料工程系         |   635 |
+ -----------+--------------------+-------+
10  rows  in  set  (0.03 sec)

6、视图简化复杂查询的过程

6.1 给予学生表,创建boys_view视图,包含所有男同学信息

1
mysql>  create  view  boys_view  as  select  from  studentinfo  where  sex= '男' ;

给予recruitinfo表,创建视图score_view,包含录取分数高于630的所有学生的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql>  create  view  boyscore_view  as  select  from  score_view  where  sno  in  ( select  sno  from  boys_view);
mysql>  select  from  boyscore_view;
+ ------+-----------+-----+---------+------+
| sno  | sname     | sex | address | dno  |
+ ------+-----------+-----+---------+------+
| 0005 | 高守传    | 男  | 山东    |    3 |
| 0004 | 张伟      | 男  | 浙江    |    1 |
| 0009 | 吴军      | 男  | 山西    |    4 |
| 0010 | 张大山    | 男  | 陕西    |    7 |
+ ------+-----------+-----+---------+------+
rows  in  set  (0.00 sec)
mysql>  create  view  result_view (sname,dname)  as  select  boyscore_view.sname,department.dname  from  boyscore_view,department  where  boyscore_view.dno=department.dno;
Query OK, 0  rows  affected (0.00 sec)

删除视图

语法:drop view view_name

drop view studentinfo_view

注意:视图在物理上是不存在的,只是一个查询结果,是一个被存储的查询。create view语句只是保存了视图的定义,所以在使用drop view语句删除视图时,删除的也只是视图的定义,对实际表中的数据没有影响。


本文转自 CARYFLASH 51CTO博客,原文链接:http://blog.51cto.com/maoxiaoxiong/1983954


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值