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

MySQL数据库中的视图

视图

​ 本篇将开始介绍有关数据库中视图的相关知识点,其中主要包含视图的基本使用,视图规则和限制。

​ 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

文章目录

    • 视图
      • 视图的基本使用
        • 视图创建
        • 修改视图/基表
        • 删除视图
      • 视图规则和限制

视图的基本使用

视图创建

​ 创建视图的语法如下:

create view 视图名 as select语句;

​ 案例如下:

-- 创建view
mysql> create view myview as select ename, dname from emp, dept where emp.deptno = dept.deptno;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from myview;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| JONES  | RESEARCH   |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | SALES      |
| ADAMS  | RESEARCH   |
| JAMES  | SALES      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)

​ 视图的创建其实就只是创建了对应的表格形式,便于我们进行对某些特定的数据进行修改,如下:

在这里插入图片描述

​ 当我们在存储数据库表的目录下查询创建出的视图的时候,我们发现,在InnoDB引擎下创建出的视图相比于其他的数据库表,只有表格式,没有对应的数据组织形式。

修改视图/基表

​ 由上文所知,视图只是存储了表格式,并没有存储对应的数据组织形式,也就意味着读取数据仍然是从基表的数据组织中读出对应的数据。所以,修改视图的数据会影响基表的数据,修改基表的数据会影响视图的数据

​ 如下,修改视图:

mysql> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)

mysql> update myview set dname = 'sales' where dname = 'SALES';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from dept;
+--------+------------+----------+
| deptno | dname      | loc      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | sales      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.01 sec)

​ 当修改表,如下:

mysql> select * from myview;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | sales      |
| WARD   | sales      |
| JONES  | RESEARCH   |
| MARTIN | sales      |
| BLAKE  | sales      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | sales      |
| ADAMS  | RESEARCH   |
| JAMES  | sales      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)

mysql> update dept set dname = 'SALES' where dname = 'sales';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from myview;
+--------+------------+
| ename  | dname      |
+--------+------------+
| SMITH  | RESEARCH   |
| ALLEN  | SALES      |
| WARD   | SALES      |
| JONES  | RESEARCH   |
| MARTIN | SALES      |
| BLAKE  | SALES      |
| CLARK  | ACCOUNTING |
| SCOTT  | RESEARCH   |
| KING   | ACCOUNTING |
| TURNER | SALES      |
| ADAMS  | RESEARCH   |
| JAMES  | SALES      |
| FORD   | RESEARCH   |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)

​ 如上所示,修改视图其实和修改表是一样的,都是修改表中存储的数据。

删除视图

​ 删除视图的语法:

drop view 视图名;

视图规则和限制

​ 视图的也存在一些对应的规则和限制,如下:

  • 与表一样,必须唯一命名(不能出现同名视图或者表名)
  • 创建视图数目没有限制,但要考虑复杂查询创建对视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • order by可以在视图中使用,但是如果从该视图检索数据时select中也含有order by,那么该视图的order by将会被覆盖
  • 视图可以和表一起使用

http://www.kler.cn/a/382430.html

相关文章:

  • HTB:PermX[WriteUP]
  • 从SRE视角透视DevOps的构建精髓
  • [数据结构从小白到大牛]第五篇:3分钟带你吃透双链表并用C语言模拟实现
  • [前端] 为网站侧边栏添加搜索引擎模块
  • 微控制器(MCU)如何运行存储在Flash的程序???
  • PySpark 本地开发环境搭建与实践
  • 多模态模型中的动态分辨率总结
  • 前端使用PDF.js把返回的base64或二进制文件流格式,实现pdf文件预览
  • 移门减震器-止门时的震动保护门体和墙体
  • 详细分析SQL state [99999]; error code [17059]; 无法转换为内部表示 解决方法(实战讲解)
  • 【LeetCode】【算法】322. 零钱兑换
  • sqli-labs(第一关)
  • 5G学习笔记三之物理层、数据链路层、RRC层协议
  • Flinksql 模拟 视图 监听
  • Python(PySimpleGUI 库)
  • gulp入门教程16:gulp插件gulp-uglify
  • 软件测试学习笔记丨Flask操作数据库-一对多
  • 电商行业企业员工培训的在线知识库构建
  • git常用操作指令
  • oasys系统代码审计
  • mmsegmentation训练自己的数据集
  • java语言基本编程原理
  • 5.Java 数组(一维数组、二维数组、数组实例实操)
  • ubuntu20安装opencv3.2记录
  • 洛谷P1090 [NOIP2004 提高组] 合并果子
  • Halcon 从XML中读取配置参数