视图

本文介绍了数据库视图的相关知识。视图是虚拟表,行和列数据动态生成。它具有简单、安全、数据独立等特点。其意义在于定制用户数据、简化操作、保障数据安全和合并分离数据。还提及了创建视图的语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

视图定义

视图意义

创建视图语法


视图定义

视图(View)并不在数据库中实际存在,而是一种虚拟表,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。即视图就是执行查询语句后所返回的结果集,所以在创建视图的时候,主要就是创建这条SQL查询语句。

对于普通的数据表来说,视图具有以下的一些特点:

1、简单:因为视图是查询语句执行后返回的已经过滤好的复合条件的结果集,所以使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件。

2、安全:使用视图的用户只能访问他们被允许查询的结果集,对于表的权限管理并不能限制到某个行或者某个列,但是通过视图就可以简单的实现。

3、数据独立:一旦视图的结构被确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。


视图意义

比如一个比较复杂的查询不想每次都写很多语句,就可以写个视图。

或者给特定用户开放某些表的读取权限,但要加一些行和列的限制,也可以写个视图。

  • 定制用户数据,聚焦特定的数据。
  • 简化数据操作
  • 基表中的数据就有了一定的安全性
  • 可以合并分离的数据,创建分区视图

第一点:使用视图,可以定制用户数据,聚焦特定的数据。

在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视

图,以后他在查询数据时,只需select * from view_caigou 就可以啦。

第二点:使用视图,可以简化数据操作。

我们在使用查询时,在很多时候我们要使用聚合函数,同时还要显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我

们只需要select * from view1就可以啦~,是不是很方便呀~

第三点:使用视图,基表中的数据就有了一定的安全性

因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改

和删除,可以保证数据的安全性。

第四点:可以合并分离的数据,创建分区视图

随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些

数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。

作者:月伴飞鱼
链接:https://www.zhihu.com/question/34740311/answer/275085248
来源:知乎


创建视图语法

创建视图的语法为:

create [or replace][algorithm]={undefined|merge|temptable}
view view_name[(col_list)]
as select_statement
[with[cascaded|local|check option]]

创建一个部门的表和一个员工的表:

部门表:

DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `departmentName` varchar(255) DEFAULT NULL,
  `departmentID` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
INSERT INTO `department` VALUES ('1', '开发部', '201');
INSERT INTO `department` VALUES ('2', '技术部', '202');
INSERT INTO `department` VALUES ('3', '测试部', '203');

员工表:

DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `lastName` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `departmentID` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
INSERT INTO `employee` VALUES ('1', '亚索', '123qq.com', '201');
INSERT INTO `employee` VALUES ('2', '李青', '12345@qq.com', '201');
INSERT INTO `employee` VALUES ('3', '剑圣', '2354@qq.com', '202');
INSERT INTO `employee` VALUES ('4', '嘉文', '6565@qq.com', '203');
select e.*,d.departmentName from employee e,department d where e.departmentID = d.departmentID

为以上的结果集创建视图:

create view VIEW_emp_dep as select e.*,d.departmentName from employee e,department d where e.departmentID = d.departmentID

select * from view_emp_dep

作者:江夏
链接:https://zhuanlan.zhihu.com/p/125582172
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值