MySQL中的视图

这篇具有很好参考价值的文章主要介绍了MySQL中的视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

视图概述

视图是一种虚拟存在的表,并不在数据库中实际存在,它的数据依赖于真实存在的数据表。通过视图不仅可以看到其依赖数据表中的数据,还可以像操作数据表一样,对数据表中的数据进行添加、修改和删除。与直接操作数据表相比,视图具有以下优点。

简化查询语句

视图不仅可以简化用户对数据的理解,也可以简化对数据的操作。

安全性

通过视图,可以更加方便的进行权限控制,使特定用户只能查询和修改指定的数据,而无法查看修改数据库中的其他数据。

逻辑数据独立性

视图可以帮助用户屏蔽数据表结构变化带来的影响。

视图管理

视图管理包括创建、查看、修改和删除视图。

创建视图

CREATE [OR REPLACE] VIEW 视图名 [(字段列表)] AS select_statement

关于上述语法格式的具体介绍如下。

(1)[OR REPLACE]:可选参数,表示若数据库中已经存在这个名称的视图就替换原有的视图,若不存在则创建视图;

(2)视图名:表示要创建的视图名称,该名称在数据库中必须是唯一的,不能与其他数据表或视图同名;

(3)select_statement:指一个完整的SELECT语句,表示从某个数据表或视图中查出满足条件的记录,将这些记录导入视图中。

视图的基本表可以是一张数据表,也可以是多张数据表,下面分别以视图的基本表为单表和多表这两种情况,通过案例演示如何创建视图,具体如下。

基于单表创建视图

例如,将员工工号empno、员工姓名ename、职位job和部门编号deptno查询出来创建视图view_emp,具体SQL语句如下所示。

CREATE VIEW view_emp AS SELECT empno,ename,job,deptno FROM emp;

下面使用SELECT语句查看view_emp视图,查询语句如下所示。

SELECT * FROM view_emp;

例如,创建一个新的视图view_emp2,视图view_emp2中包含的字段和视图view_emp相同,但视图view_emp2中字段名称和员工表中字段名称不一致,具体创建语句如下所示。

CREATE VIEW view_emp2 (e_no,e_name,e_job,e_deptno)
 AS SELECT empno,ename,job,deptno FROM emp;

基于多表创建视图

例如,视图中需要使用ems数据库中员工编号empno、员工姓名ename、职位job、部门编号deptno和部门名称dname的信息。 下面根据需求创建视图view_emp_dept,具体创建语句及执行结果如下所示。

CREATE VIEW view_emp_dept(e_no,e_name,e_job,e_deptno,e_deptname)
AS SELECT e.empno,e.ename,e.job,e.deptno,d.dname
   FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

查看视图

创建好视图后,可以通过语句查看视图的字段信息、视图的状态信息、视图的创建语句。

(1)查看视图的字段信息

在MySQL中,使用DESCRIBE语句可以查看视图的字段名、字段类型等字段信息。DESCRIBE语句的基本语法格式如下所示。

DESCRIBE 视图名;

或简写为:

DESC 视图名;

 例如,使用DESCRIBE语句查看视图view_emp_dept的字段信息,具体语句如下所示。

DESCRIBE view_emp_dept;

(2)查看视图的状态信息

在MySQL中,可以使用SHOW TABLE STATUS语句可以查看视图和数据表的状态信息。SHOW TABLE STATUS语句的基本语法格式如下所示。

SHOW TABLE STATUS LIKE '视图名';

在上述格式中,LIKE表示后面匹配的是字符串,'视图名'表示要查看的视图的名称,视图名称需要使用单引号包裹起来。

例如,使用SHOW TABLE STATUS语句查看视图view_emp_dept的信息,具体语句如下所示。

SHOW TABLE STATUS LIKE 'view_emp_dept' \G

(3)查看视图的创建语句

SHOW CREATE VIEW 视图名;

例如:

SHOW CREATE VIEW view_emp_dept\G

修改视图

视图的修改指的是修改数据库中存在的视图的定义,当视图的基本表中字段发生变化时,需要对视图进行修改以保证查询的正确性。例如,view_emp视图的基本表emp中员工姓名字段修改了名称,此时再使用视图就会出错。在MySQL中,修改视图的方式有两种,具体如下。

(1)使用CREATE OR REPLACE VIEW语句修改视图

CREATE OR REPLACE VIEW 视图名 AS SELECT语句

使用该语句修改视图时,要求被修改的视图在数据库中已经存在,如果视图不存在,那么将创建一个新的视图。

例如,在视图view_emp_dept原有的基础上新增员工上级工号的字段,具体SQL语句如下所示。

CREATE OR REPLACE VIEW view_emp_dept(e_no,e_name,e_job,e_mgr,e_deptno,e_deptname)
AS SELECT e.empno,e.ename,e.job,e.mgr,e.deptno,d.dname
    FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

(2)使用ALTER语句修改视图

ALTER VIEW <视图名> AS <SELECT语句>

例如,使用ALTER语句将视图view_emp_dept中的部门编号字段进行删除,具体语句如下所示。

ALTER VIEW view_emp_dept (e_no,e_name,e_job,e_mgr,e_deptname)
AS SELECT e.empno,e.ename,e.job,e.mgr,d.dname
    FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

删除视图

当视图不再使用时,可以将其删除。删除视图时,只会删除所创建的视图,不会删除基本表中的数据。删除一个或多个视图可以使用DROP VIEW语句,删除视图的基本语法格式如下所示。

DROP VIEW  view_name [,view_name1,…];

例如,使用DROP VIEW语句删除视图view_emp,具体SQL语句如下所示。

DROP VIEW view_emp;

视图数据操作

视图数据操作,就是通过视图来查询、添加、修改和删除基本表中的数据。因为视图是一个虚拟表,不真实保存数据,所以通过视图来操作数据时,实际操作的是基本表中的数据。本节将对视图数据的添加、修改和删除进行讲解。

添加数据

通过视图向基本表添加数据可以使用INSERT语句。例如,通过视图在部门表中添加一个部门信息。 由于此时数据库中还没有部门表对应的视图,所以需要数据库管理员先创建部门表dept对应的视图,具体SQL语句如下所示。

CREATE VIEW view_dept(d_no,d_name) AS SELECT * FROM dept;

 通过视图向数据表中添加数据的方式与直接向数据表中添加数据的格式一样,具体SQL语句如下所示。

INSERT INTO view_dept VALUES(50, '人力资源部');

修改数据

通过视图修改基本表的数据,可以使用UPDATE语句。 例如,使用UPDATE语句,通过视图将研究院的部门名称修改为研究中心,具体SQL语句如下所示。

UPDATE view_dept SET d_name='研究中心' WHERE d_name='研究院';

删除数据

通过视图删除基本表的数据,可以使用DELETE语句。 例如,通过视图view_dept删除部门表dept中部门名称为人力资源部的记录,具体SQL语句如下所示。

DELETE FROM view_dept WHERE d_name='人力资源部';

上机实践:图书管理系统中视图的应用

# 创建一个只包含图书名称、图书上架时间和图书状态的视图view_book_state

# 创建一个只包含图书名称、借阅者名称和借阅时间的视图view_book_borrower

# 删除视图view_book_borrower文章来源地址https://www.toymoban.com/news/detail-481688.html

到了这里,关于MySQL中的视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第58讲:MySQL视图中的件检查选项的核心概念

    视图创建完毕后,可以通过视图中定义的SQL语句,从关联的基表中查询出数据,我们也可以直接向视图写入指定字段的数据,数据不会写在视图里,最终会写在视图所关联的基表中。 我们再创建视图时,定义的视图SQL肯定是由逻辑条件的,如果在创建视图时,没有指定检查选

    2024年02月05日
    浏览(24)
  • MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项、原理、搭建步骤

    错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中 发生任何严重错误时的相关信息 。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysq

    2024年02月04日
    浏览(75)
  • 【安装】从VMware虚拟机到Centos,到FinalShell连接虚拟机,到Centos中安装docker,用Navicat Premium连接Centos中的docker中的mysql

    安装VMware虚拟机,安装Centos,FinalShell连接虚拟机;在Centos中安装docker,下载mysql的docker,暴露端口;用Navicat Premium连接Centos中的docker中的mysql,进行增删改查 下载Centos7的网址: 使用默认设置 选择稍后安装 选择Linux系统,选择安装版本,这里选Centos,可以按需选择; 安装位置

    2024年02月02日
    浏览(49)
  • (2)前端控制器的扩展配置, 视图解析器类型以及MVC执行流程的概述

    注册前端控制器的细节 在web.xml文件注册SpringMVC的前端控制器 DispatcherServlet 时在url-pattern标签中使用 / 和 /* 的区别 / 可以匹配.html或.js或.css等方式的请求路径,但不匹配*.jsp的请求路径 /* 可以匹配所有请求(包括.jsp请求), 例如在过滤器中使用 /* 表示匹配所有请求 DispatcherServle

    2024年02月15日
    浏览(48)
  • 记录windows蓝屏,强制重启后导致windows上虚拟机docker中的mysql镜像坏掉了

    场景描述: 日常开发学习时,我都是用一个笔记本,项目采用前后端分离的微服务架构,中间件nacos在window上部署运行,mysql和redis都是部署在windows虚拟机的docker中,大量的进程给电脑内存干崩了,最后导致蓝屏,没办法只能强制重启。 解决思路: 1、重启后再次启动项目时

    2024年02月17日
    浏览(48)
  • Tomcat 配合虚拟线程,一种新的编程体验

    Java 21 在今年早些时候的 9 月 19 日就正式发布,并开始正式引入虚拟线程,但是作为 Java 开发生态中老大哥 Spring 并没有立即跟进,而是在等待了两个月后的 11 月 29 日,伴随着 Spring Boot 3.2 版本的发布,在这个版本中也终于是引入了对虚拟线程的支持。 虚拟线程的引入标志着

    2024年02月05日
    浏览(56)
  • VMware 虚拟机占用磁盘空间过大的一种解决方案

    在使用VMware虚拟机的过程中,VM会自动扩大虚拟磁盘的占用空间。发现无论是VM自带的碎片整理还是压缩,这两个操作都无法明显减少虚拟机占用空间。 现在找到一种方法可以做到这点( 可能只适用于VM workstation pro,并未测试过普通版本 ),下面是方法的整理 1.正常关闭虚拟

    2024年02月13日
    浏览(88)
  • MySQL视图创建和给予用户视图权限

    在 checkrecord 表上创建一个名为 v_checkrecord 的视图 只映射id,username,nickname字段 通过这个视图可以很好地保护基本表中的数据。 SELECT * FROM v_checkrecord 使用 CREATE USER 创建一个用户,用户名是 test1,密码是 test1,主机名是 localhost。SQL 语句和执行过程如下。 使用 RENAME USER 语句将

    2024年02月12日
    浏览(52)
  • 【MySQL】MySQL视图

    视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 语法: 案例: 我们创建一个视图,其实就是在数据库中创建了一个表 在视图中将ename为’CLARK’的ename改为T

    2024年04月13日
    浏览(33)
  • 虚拟机栈概述

            由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现, 缺点是性能下降,实现同样的功能需要更多的指令。 1.2.1、虚拟机栈概念         Java虚拟机栈(Java

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包