返回顶部
首页 > 资讯 > 数据库 >MySQL数据库高级(三)——视图
  • 776
分享到

MySQL数据库高级(三)——视图

2024-04-02 19:04:59 776人浏览 八月长安
摘要

Mysql数据库高级(三)——视图 一、视图简介 1、视图简介 视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式。视图包含一系列带有名称的数据列和数据行,但视图中的数据

Mysql数据库高级(三)——视图

一、视图简介

1、视图简介

视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式。视图包含一系列带有名称的数据列和数据行,但视图中的数据并不真实存在于数据库中,视图返回的是结果集。

2、创建视图的目的

视图是存储在数据库中的查询的sql语句,创建视图主要出于两种原因:
A、实现安全。视图可设置用户对视图的访问权限。
创建查询是JAVA班学生成绩的视图javaview、NET班学生成绩的视图netview,授权java能够访问javaview视图,授权net可以访问netview视图。

create view javaview
as
select a.StudentID,a.sname,email,c.subJectName,a.class,b.mark
 from TStudent a join TScore b on a.StudentID=b.StudentID
join TSubject c on b.subJectID=c.subJectID where a.class='JAVA';

create view netview
as
select a.StudentID,a.sname,email,c.subJectName,a.class,b.mark 
 from TStudent a join TScore b on a.StudentID=b.StudentID
join TSubject c on b.subJectID=c.subJectID where a.class='NET';

授权java用户访问 schoolDB.javaview视图
grant select on schoolDB.javaview to 'java'@'%' identified by '123456';
授权net用户访问 schoolDB.netview视图
grant select on schoolDB.netview to 'net'@'%' identified by '123456';
使用SQL Manager客户端连接数据库时,java、net用户分别可以访问javaview视图和netview视图。
B、隐藏数据复杂性。视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等。视图就像一个视口,从视口中只能看到过滤后的某些数据列。

3、视图的优点

A、视图能简化用户操作
视图机制使用户可以将注意力集中在所关心地数据上。如果数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的的数据查询操作。例如,定义了若干张表连接的视图,就将表与表之间的连接操作对用户隐藏。用户所作的只是对一个虚表的简单查询,而虚表是怎样得来的,用户无需了解。
B、视图使用户能以多种角度看待同一数据
视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时。
C、视图对重构数据库提供了一定程度的逻辑独立性
数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全的支持。
在关系数据库中,数据库的重构造往往是不可避免的。重构数据库最常见的是将一个基本表“垂直”地分成多个基本表。例如:将学生关系student(sid,sname,sex,age,dept,leader),分为studentinfo(sid,sname,sex,age)和deptinfo(sid,dept)两个关系。原表student为studentinfo表和deptinfo表自然连接的结果。如果建立一个视图student:

CREATE VIEW student(sid,sname,sex,age,dept) 
AS SELECT studentinfo.sid,studentinfo.sname,studentinfo.sex,studentinfo.age,
deptinfo.dept FROM studentinfo, deptinfo WHERE studentinfo.sid=deptinfo.sid;

尽管数据库的逻辑结构变为studentinfo和deptinfo 两个表,但应用程序不必修改,因为新建立的视图定义为用户原来的关系,使用户的外模式保持不变,用户的应用程序通过视图仍然能够查找数据。
视图只能在一定程度上提供数据的逻辑独立,比如由于视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因为基本表构造的改变而改变。
D、视图能够对机密数据提供安全保护
在设计数据库应用系统时,可以对不同的用户定义不同的视图,使机密数据不出现在不应该看到机密数据的用户视图上。如student表涉及全校15个院系学生数据,可以在其上定义15个视图,每个视图只包含一个院系的学生数据,并只允许每个院系的主任查询和修改本原系学生视图。
E、适当的利用视图可以更清晰地表达查询
例如经常需要执行这样的查询“对每个学生找出他获得最高成绩的课程号”。可以先定义一个视图,求出每个同学获得的最高成绩。

4、创建视图的语法

CREATE VIEW viewname(列1,列2...)
 AS SELECT (列1,列2...)
 FROM ...;

创建学生信息的视图:

create view studentview
as select studentID, sname, sex from TStudent;

二、视图的操作

1、视图的使用

视图的使用和普通表一样。
select * from studentview;
不能在一张由多张关联表连接而成的视图上做同时修改两张表的操作;
视图与表是一对一关系情况:如果没有其它约束(如视图中没有的字段,在基本表中是必填字段情况),可以进行增删改数据操作。

2、删除视图

drop view studentview;

3、通过视图修改数据

如果视图的基表是一张表,可以通过视图向基表插入记录,要求视图中的没有的列允许为空。
A、通过视图插入数据到表
insert into studentview(studentID, sname, sex)VALUES('01001', '孙悟空', '男');
查询插入的记录,可以看到通过视图没有的列,值为空或默认值。
MySQL数据库高级(三)——视图
B、通过视图删除表中记录
视图的基表只能有一张表,如果有多张表,将不知道从哪一张表删除。
delete from studentview where studentid='01001';
C、通过视图修改表中记录
只能修改视图中有的列。
update studentview set sname='孙悟空' where studentid='00001';

4、查看视图的信息

查看视图的信息

describe viewname;
desc scoreview;

查看所有的表和视图
show tables;
查看视图的信息
show fields from scoreview;

5、修改视图

CREATE OR REPLACE VIEW viewname AS SELECT [...] FROM [...];

alter view studentview 
as select studentID as 学号, sname as 姓名, sex as 性别 from TStudent;

6、WITH CHECK OPTioN

如果在创建视图的时候指定了“WITH CHECK OPTION”,更新数据时不能插入或更新不符合视图限制条件的记录。

三、视图实例

1、使用视图创建视图

创建视图的查询的表称为基表,基表可以是视图和表。

create view sview
as select studentID, sname, sex from studentview where studentID>990 and sex='男';

2、创建学生成绩表的视图

创建一个视图,视图包含学生 学号、姓名、学科和成绩。

create view view1
as select a.StudentID,a.Sname,c.subJectName,b.mark  from TStudent a 
join TScore b on a.StudentID=b.StudentID join TSubject c on b.subJectID=c.subJectID;

MySQL数据库高级(三)——视图
创建成绩视图,包含学号、姓名、计算机网络课程成绩、数据结构成绩、JAVA开发成绩。

create view scoreview
as select studentid 学号,sname 姓名,
AVG(case subjectname when '计算机网络' then mark END) 计算机网络,
AVG(case subjectname when '数据结构' then mark END) 数据结构,
AVG(case subjectname when 'JAVA开发' then mark END)  JAVA开发 from view1
group by 学号;

MySQL数据库高级(三)——视图

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库高级(三)——视图

本文链接: https://lsjlt.com/news/42981.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL数据库高级(三)——视图
    MySQL数据库高级(三)——视图 一、视图简介 1、视图简介 视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式。视图包含一系列带有名称的数据列和数据行,但视图中的数据...
    99+
    2024-04-02
  • MySQL数据库视图
    day05 MySQL数据库视图一、视图概述:    视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,内容是由查询定义的。数据库中只存在视图的定义,而没有相关...
    99+
    2024-04-02
  • MySQL数据库数据视图
    目录一、 数据视图二、数据视图操作创建视图修改视图数据修改视图列明删除视图三、数据的备份与回复liunx备份mysql备份四、 MySQL存储过程和函数概念五、存储过程操作初始数据创...
    99+
    2022-11-13
    MySQL数据库 MySQL数据视图
  • Mysql之数据库视图
    Mysql之数据库视图        数据库中的视图是一个虚拟表。同真实表一样,包含行和列数据,行和列的数据来自 定义视图查询...
    99+
    2024-04-02
  • mysql数据库的高级应用索引、视图,触发器的详细介绍
    下文主要给大家带来mysql数据库的高级应用索引、视图,触发器的详细介绍,希望这些内容能够带给大家实际用处,这也是我编辑mysql数据库的高级应用索引、视图,触发器的详细介绍这篇文章的主要目的。好了,废话不...
    99+
    2024-04-02
  • MySQL数据库高级(六)——索引
    MySQL数据库高级(六)——索引 一、索引简介 1、索引简介 索引(Index)是帮助MySQL高效获取数据的数据结构。在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。M...
    99+
    2024-04-02
  • MySQL数据库高级(九)——游标
    MySQL数据库高级(九)——游标 一、游标简介 1、游标简介 游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。游标是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。尽管游标能遍历...
    99+
    2024-04-02
  • MySQL数据库高级(八)——事件
    MySQL数据库高级(八)——事件 一、事件简介 1、事件简介 事件是用来执行定时任务的一组SQL集,在时间到时会触发。一个事件可调用一次,也可周期性的启动,由一个特定的事件调度器线程来管理的。事件取代了原...
    99+
    2024-04-02
  • 高性能内存图数据库RedisGraph(三)
          这篇文章,我将介绍截止目前,RedisGraph的最新版本(v2.4)对Cypher语言的支持情况。       1.模式(patterns)       RedisGraph已支持Cypher中所有的模式。       2....
    99+
    2015-01-01
    高性能内存图数据库RedisGraph(三)
  • MySQL数据库——MySQL创建视图(CREATE VIEW)
    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。 基本语法 可以使用 CREATE VIEW 语句来创建视图。 语法格式如下: CREATE VIEW AS 语法说明如下。 :指定...
    99+
    2023-09-08
    数据库 mysql sql
  • MySQL数据库高级(一)——数据完整性
    MySQL数据库高级(一)——数据完整性 一、数据完整性简介 1、数据完整性简介 数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况。数据的完整性是指数据的可靠性和准确...
    99+
    2024-04-02
  • mysql怎么导出数据库视图
    mysql 数据库视图可通过如下方法导出:使用 mysqldump 实用程序:mysqldump -u [用户名] -p[密码] --no-data [数据库名称] [视图名称] >...
    99+
    2024-08-06
    mysql
  • MySQL数据库高级(五)——触发器
    MySQL数据库高级(五)——触发器 一、触发器简介 1、触发器简介 触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,比数据库本身标准的功能有更精细和更复杂的数据控制能力。 2...
    99+
    2024-04-02
  • MySQL数据库高级操作示例
    小编给大家分享一下MySQL数据库高级操作示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!文章目录数据表高级操作准备工作:安装...
    99+
    2024-04-02
  • MySQL数据库高级数据操作之新增数据
    目录多数据插入主键冲突1、主键冲突更新2、主键冲突替换蠕虫复制多数据插入 只要写一次insert,可以插入多条数据 基本语法: insert into 表名 [(字段列表)] val...
    99+
    2024-04-02
  • Mysql数据库教程(三)[云图智联]
    1.1高级查询 1.1.1 EXISTS子查询 在实际开发中,我们常常会遇到表是否存在,及创建表等等的过程,mysql中如何对已存在的表进行提示并且进行创建呢?可以 使用exists子句对表创建进行判断生成。 语法: DRO&...
    99+
    2020-06-03
    Mysql数据库教程(三)[云图智联]
  • MySQL数据库高级(二)——自定义函数
    MySQL数据库高级(二)——自定义函数 一、自定义函数简介 自定义函数 (user-defined function UDF)是一种对MySQL扩展的途径,其用法和内置函数相同。自定义函数的两个必要条件:...
    99+
    2024-04-02
  • 三、mysql高级操作
    二、分库 三、分表...
    99+
    2016-03-05
    mysql高级操作
  • MySQL数据库高级(七)——事务和锁
    MySQL数据库高级(七)——事务和锁 一、事务简介 1、事务简介 事务(Transaction) 是指作为单个逻辑工作单元执行的一系列操作。 2、事务的特性 A、原子性(Atomicity)表示组成一个事...
    99+
    2024-04-02
  • 操作MySQL数据库的高级方法
    下文主要给大家带来操作MySQL数据库的高级方法,希望这些内容能够带给大家实际用处,这也是我编辑操作MySQL数据库的高级方法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。1.数据备份与还原(1)...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作