当前位置: 首页 > article >正文

Mysql之视图创建

一.简介

出于安全的原因,有时要隐藏一些重要的数据信息。这时,可以创建一个视图,在原有

的表(或者视图)的基础上重新定义一张虚拟表,选取基本的或对用户有用的信息,屏

蔽掉那些对用户没有用,或者用户没有权限了解的信息,保证数据的安全。

在使用查询时,很多时候要使用聚合函数,可能还要关联好几张表,查询语句会显得比

较复杂,而且经常要使用这样的查询。遇到这种情况,数据库设计人员可以预先通过视

图创建好查询。一方面,屏蔽了复杂的数据关系,另一方面,用户只需从建好的视图进

行查询,就可以轻松得到想要的信息,使用户操作简单化。

二.实验操作

1.创建视图
CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
  • 视图名称:默认为在当前数据库中创建视图。如要在其他数据库中,应为 db_name.view_name。
  • CREATE VIEW:创建新视图,OR REPLACE子句将替换已有的视图。
  • SELECT语句:用来创建视图的SELECT语句,可从一个或两个以上的基本表或其他视 图进行选择。
  • 视图是虚表,只存储对表的定义,不存储数据。
例子:
create or replace view stu_v_1 as select id,name from emp;
  • 创建视图权限,以及所涉列的SELECT权限。如果还有OR REPLACE子句,必须在视图上具有删除视图的权限。
  • 所用表已存在,列名唯一。
  • 视图名不能与表同名。
  • FROM子句中不能使用子查询。
注意:

SELECT语句不能引用系统或用户变量。

SET @myVar = '小岩';
CREATE VIEW my_view AS SELECT * FROM emp WHERE name = @myVar; //会报错

SELECT语句不能引用预处理语句参数。

#预处理语句:
PREPARE stmt FROM 'SELECT * FROM my_table WHERE id = ?';
SET @param = 1;
EXECUTE stmt USING @param;
#创建一个视图并使用预处理语句的参数
PREPARE stmt FROMSELECT * FROM my_table WHERE some_column = ?’;
CREATE VIEW my_view AS EXECUTE stmt USING @param; //报错

允许使用ORDER BY,但以后通过从视图进行选择查询时,它将被忽略。

CREATE VIEW my_view AS SELECT * FROM emp ORDER BY id;

视图是一种虚拟表,它表示的是一个查询的结果。虽然可以在视图的定义中使用 ORDER BY,但视图更像是存储在数据库中的逻辑查询,而不是有物理顺序的数据表。视图中的数据排序不会永久保存,因此在对视图进行选择查询时,ORDER BY 并不会自动应用。

在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句。如果与视图相关联的表或视图被删除,则该视图将不能再使用。

不能引用TEMPORARY表,不能创建TEMPORARY视图。

分类:

临时表:临时表是会话级别的表,只有在当前会话中有效。一旦会话结束,临时表会自动被删除。

临时视图(TEMPORARY view):与临时表类似,临时视图本质上意味着在当前会话结束后,视图将自动删除。但是 MySQL 不支持创建这样的视图

2.来自视图

创建视图emp_v_1:

CREATE OR REPLACE VIEW emp_v_1 
AS 
SELECT id,name FROM emp;
例子:

可以基于视图创建新的视图,创建视图emp_v_2,统计每个部门员工的平均薪资。

CREATE OR REPLACE VIEW emp_v_2 
AS 
SELECT dept_id,AVG(salary) 
FROM emp_v_1 
GROUP BY dept_id;

http://www.kler.cn/news/368537.html

相关文章:

  • [NeetCode 150] Foreign Dictionary
  • 龙芯+FreeRTOS+LVGL实战笔记(新)——13LVGL字体转换
  • SSM学习day01 JS基础语法
  • 13 Docker容器单机网络架构全攻略:使用自定义桥接的实践与探索
  • 【笔记】软件测试09——接口测试
  • 【Chapter 13】因果推断中的图形模型:处理遗漏变量偏误
  • 如何从示波器上得到时间常数
  • C#制作学生管理系统
  • 【热门主题】000010 深入 Vue.js 组件开发
  • 关于我的数据库——MySQL——第五篇
  • pandas习题 024:用字典构造 DataFrame
  • k8s的配置和存储(ConfigMap、Secret、Hostpath、EmptyDir以及NFS的服务使用)
  • 一种小型固定翼无人机弹射着陆系统的设计
  • 一步一步从微信小程序获取asp.net Core API的数据
  • 鸿蒙模块化
  • 网页上的视频怎么下载下来?三种方法
  • Python中的文本分析:统计文本文件中每个单词的出现频率
  • Elasticsearch 实战:搜索与分析的利器
  • Vmware虚拟机引起的windowswifi功能消失异常
  • Centos7.9安装MySQL(二进制)
  • 端到端测试?何必Postman,试试Automan
  • netty之ServerBootstrap和Bootstrap
  • 优先算法:双指针、移动零
  • 程序员修仙传
  • Git详解
  • 使用教程:基于 uiautomator2 和 pytest 的图片相似度测试脚本