MySQL中使用视图

什么是视图

视图是一张虚表,所谓虚表,就是说这张表里面没有数据,他的数据是从别的基础表中获取到的。视图在被定义时,就确定了和基础表的联系,比如视图的某个字段是来自基础表A,另外的几个字段是来自基础表B;所以说视图是基于基础表的。

视图也是一张表,对于基础表的所有基础操作(增删改查),视图也适用。当然,当你操作视图的时候,数据库通过中间过程的处理,实际上是操作的基础表。

对于查询操作,视图一般都没问题;不过删除、新增和修改操作,一般会有限制,你得仔细考虑代码的正确性,举个例子,比如视图中的字段来自两个基础表,但是并不包含两个基础表的所有非空字段,当你执行插入操作时,肯定是会报错的。

为什么要使用视图

1、重用sql语句。
2、简化复杂的sql操作。在编写一条查询后,可以方便地重用它而不必知道它的内部查询细节。
3、数据安全性。可以给用户授予表的特定部分的访问权限而不是表的访问权限。也就是说可以限制查看数据的权限。(一款商品,存储在A表中。销售人员可以查看到基本信息,商品的售价、库存等。但是无法查看到进货价格。限制其访问敏感数据)。
4、更改数据的展示方式。视图可以拼接多个表中的某一个字段的值展示在视图中。

视图的使用规则

1、视图名必须唯一。不能取与其他的表/视图相同的名字。
2、创建视图需要足够的访问权限。
3、视图可以嵌套,既可以利用其他视图中查询出的数据来构建一个新的视图。
4、ORDER BY 可以在视图中使用。如果查询该视图时,使用了ORDER BY 则外面的ORDER BY 会覆盖视图中默认的ORDER BY。
5、视图不能索引,也不能有关联的触发器或默认值。
6、视图可以和表一同使用。比如,视图与表进行表连接。

表结构:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for employess
-- ----------------------------
DROP TABLE IF EXISTS `employess`;
CREATE TABLE `employess`  (
  `id` bigint(255) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '员工id',
  `last_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '员工名字',
  `bonus` bigint(255) DEFAULT NULL COMMENT '奖金',
  `operating_post` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '岗位',
  `salary` bigint(10) DEFAULT NULL COMMENT '工资',
  `birthday` date DEFAULT NULL COMMENT '入职时间',
  `department_id` int(11) DEFAULT NULL COMMENT '岗位编号',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

视图的创建

-- 创建视图,保存没有奖金的员工名字、岗位名称、以及岗位id。
create VIEW findnoreward as
select last_name,  operating_post, department_id 
from employess
where bonus = 0;

语法:

create view `视图名` as `SQL`;
a.其中视图名尽量使用简单易懂的命名。
b.as关键字是必须存在的,不可省略。
c.as关键字后跟 SQL 语句,分号(;)结尾。

视图的使用

-- 查询视图
select * from findnoreward;
-- 查询没有奖金的员工的名字
select last_name from findnoreward;

语法:

select * from `视图名`;
select  `需要查询的字段` from `视图名`;
a.和正常表的使用方式基本相同,视图是一种虚拟表(具体看视图的注意事项)。
b.如果你要单独查询视图中某个字段,你只需要指定字段的名字即可。
c.视图也支持增删改,但我们一般对视图进行增删改。

视图的删除

-- 删除视图
drop view findnoreward;

语法:

drop view `视图名`;

使用视图相关注意事项

1、一般情况下,视图是可以更新的。(即insert、update、delete 操作)。更新一个视图将更新他的基础表(因为视图本身没有数据,是一个虚拟的表)。如果gengxin 你对视图进行增加、删除等操作,实际上就是对基础表进行操作。但是。
2、并不是所有的视图都是可以更新的。如果MySQL 不能正确地确定被更新的字段,则不能进行更新。比如,视图中某个字段是基础表底薪字段乘以当前税率得到的字段。起别名为税后工资,你要更新该字段,MySQL会找不到具体的基础字段。则不允许更新(包括插入、删除)。
如果视图定义有以下操作,则不能进行更新:
a.分组(GROUP BY和HAVING)。
b.表连接,inner jion。
c.子查询。
d.并且。
f.聚合函数(SUM()、AVG()、MAX()、MIN())等。
g.distinct 关键字。

猜你喜欢

转载自blog.csdn.net/uziuzi669/article/details/109260634
今日推荐