数据库11-视图

第十一章 视图

视图基本概念

视图的含义

  • 视图是从一个或多个表导出的虚拟的表,其内容由查询定义
  • 使用视图提高数据库的系统安全
  • 视图与真实的数据表一样具有行和列组成
  • 视图可以理解为是一个虚拟的表
  • 视图不实现数据存储

视图的作用

  • 简化了操作,把经常使用的数据定义为视图
  • 安全性,用户只能查询和修改能看到的数据
  • 逻辑上的独立性,屏蔽了真实表的结构带来的影响

视图的缺点

  • 性能差
  • 修改限制
    • 单表视图一般用于查询和修改,会改变基本表的数据
    • 多表视图一般用于查询,不会改变基本表的数据

视图指令

  • 创建视图:[CREATE|REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)] AS SELECT_statement [WITH[CASCASDED|LOCAL] CHECK OPTION]

    • CREATE|REPLACE:创建新的或替换已存在的
    • ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}:视图选择的算法
      • UNDEFINED:不定义,数据库自动选择算法
      • MERGE:混合,合并视图的语句与定义
      • TEMPTABLE:将视图结果存入临时表中,用临时表来执行语句
    • column_list:属性列
    • SELECT_statement:SELECT语句
    • CASCASDED|LOCAL:可选参数
      • CASCASDED:默认值,更新视图时要满足所有相关视图和表的条件
      • LOCAL:更新视图时满足该视图本身定义即可
  • 查看视图:SELECT * FORM 视图名

  • 删除视图: DROP VIEW 视图名

单表视图应用

例如,create view view1 as select id,name,nian from test1;表示创建一个名为view1的视图,从test1数据表中选中id,name和nian三列来建立view1视图

多表视图应用

需求:在student和stu_info表上,创建stu_class视图,查询出stu_id、姓名和班级

  1. 创建stu_info表,并向其中插入数据
mysql> create table stu_info(s_id int(3),class varchar(50),addr varchar(100));
mysql> insert into stu_info values (1,'class1','fuzhou'),(2,'class2','xiamen'),(3,'class1','sichuan');

2.创建student表,并向其中插入数据

mysql> create table student (s_id int(3),name varchar(30));
mysql> insert into student(s_id,name) values (1,'xi'),(2,'mei'),(3,'lan');

3.创建stu_class视图

创建的视图包含id、name和class字段
其中,id字段对应student表中的s_id字段,name字段对应student表中的name字段,class字段对应stu_info表中的class字段

mysql> create view stu_class(id,name,class) as select student.s_id,student.name,stu_info.class from student,stu_info where student.s_id=stu_info.s_id;

4.查看视图

mysql> select * from stu_class;
+------+------+--------+
| id   | name | class  |
+------+------+--------+
|    1 | xi   | class1 |
|    2 | mei  | class2 |
|    3 | lan  | class1 |
+------+------+--------+
3 rows in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值