Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL从删库到跑路_高级(三)——视图

MySQL从删库到跑路_高级(三)——视图

作者头像
良月柒
发布于 2019-03-19 08:34:49
发布于 2019-03-19 08:34:49
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

作者:天山老妖S 链接:http://blog.51cto.com/9291927

一、视图简介

1、视图简介

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

2、创建视图的目的

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create view javaviewasselect a.StudentID,a.sname,email,c.subJectName,a.class,b.mark from TStudent a join TScore b on a.StudentID=b.StudentIDjoin TSubject c on b.subJectID=c.subJectID where a.class='JAVA';create view netviewasselect a.StudentID,a.sname,email,c.subJectName,a.class,b.mark 
 from TStudent a join TScore b on a.StudentID=b.StudentIDjoin 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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、创建视图的语法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE VIEW viewname(1,列2...) AS SELECT (1,列2...) FROM ...;

创建学生信息的视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create view studentviewas select studentID, sname, sex from TStudent;

二、视图的操作

1、视图的使用

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

2、删除视图

drop view studentview;

3、通过视图修改数据

如果视图的基表是一张表,可以通过视图向基表插入记录,要求视图中的没有的列允许为空。 A、通过视图插入数据到表 insert into studentview(studentID, sname, sex)VALUES('01001', '孙悟空', '男'); 查询插入的记录,可以看到通过视图没有的列,值为空或默认值。

B、通过视图删除表中记录 视图的基表只能有一张表,如果有多张表,将不知道从哪一张表删除。 delete from studentview where studentid='01001'; C、通过视图修改表中记录 只能修改视图中有的列。 update studentview set sname='孙悟空' where studentid='00001';

4、查看视图的信息

查看视图的信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
describe viewname;desc scoreview;

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

5、修改视图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、使用视图创建视图

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create view sviewas select studentID, sname, sex from studentview where studentID>990 and sex='男';

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create view view1as 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;

创建成绩视图,包含学号、姓名、计算机网络课程成绩、数据结构成绩、JAVA开发成绩。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
create view scoreviewas 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 view1group by 学号;

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SQL笔试50题(上)
本节内容,我们使用在入门内容部分介绍的在线SQL平台sql fiddle进行测试。
fireWang
2020/02/18
8420
存储过程和触发器的应用
实验案例三:创建视图 方法一:在图形界面下创建视图(以Myschool数据库为例) 创建一个视图,分别来自三个的表的三个列,并重命名列,生成的视图名为student_info,如下图所示: 通过查询语
L宝宝聊IT
2018/06/20
6560
索引,视图,存储过程和触发器文档
实验案例一:验证索引的作用 1、首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。 2、向表中插入大量数据,数据越多,验证索引的效果越好。 使用语句完成:While 1>0 Insert into学生表(姓名) values(‘于美丽’) 上面语句是一个死循环,除非强制结束,如果1大于就会一直向表中插入姓名 如下图所示: 等待5分钟左右,打开表的属性,查看表的行数,当前为1032363,如下图所示: 3、使用语句查询第90
企鹅号小编
2018/01/23
1.2K0
索引,视图,存储过程和触发器文档
MySQL从删库到跑路_高级(四)——存储过程
存储过程是一组具有特定功能的SQL语句集组成的可编程的函数,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数来调用执行。 存储过程是数据库管理中常用的技术之一,可以很方便的做些类似数据统计、数据分析等工作,SQL SERVER、ORACLE、MySQL都支持存储过程,但不同的数据库环境语法结构有所区别。
良月柒
2019/03/19
7540
存储过程和触发器的应用
实验案例三:创建视图 方法一:在图形界面下创建视图(以Myschool数据库为例) 创建一个视图,分别来自三个的表的三个列,并重命名列,生成的视图名为student_info,如下图所示: 通过查询语句查看视图:select * from student_info 方法二:使用语句创建视图(以schoolDB数据库为例) 进行数据库设计的时候,一个表有很多列,我们可以在表上创建视图,只显示指定的列。 Select语句可以作为一个视图 selectSname,sex,Classfromdbo.
企鹅号小编
2018/01/22
8740
存储过程和触发器的应用
MySQL从删库到跑路(六)——SQL插入、更新、删除操作
为表的指定字段插入数据,就是在INSERT语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。 必须制定插入的列
良月柒
2019/03/20
1.1K0
MySQL从删库到跑路(五)——SQL查询
在SELECT语句中使用星号“”通配符查询所有字段 在SELECT语句中指定所有字段 select from TStudent;
良月柒
2019/03/20
2.6K0
MySQL从删库到跑路(五)——SQL查询
MySQL从删库到跑路_高级(一)——数据完整性
数据冗余是指数据库中存在一些重复的数据,数据完整性是指数据库中的数据能够正确反应实际情况。 数据的完整性是指数据的可靠性和准确性,数据完整性类型有四种: A、实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过唯一约束,主键约束或标识列属性)。 B、域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则)。 C、引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系。引用完整性确保键值在所有表中一致,不能引用不存在的值.如果一个键。 D、自定义完整性:用户自己定义的业务规则,比如使用触发器实现自定义业务规则。
良月柒
2019/03/19
1.9K0
Windows server 2016——查询优化与事务处理
本系列文章将会讲解SQL server 中 查询优化与事务处理,了解使用索引工具,使用视图,存储过程,触发器等操作。
网络豆
2023/10/17
3320
Windows server 2016——查询优化与事务处理
索引、视图、存储过程和触发器的应用
实验案例一:验证索引的作用 1、首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。 2、向表中插入大量数据,数据越多,验证索引
L宝宝聊IT
2018/06/20
7820
MySQL面试题
DML数据操作语言,负责对数据访问工作的指令集,例如inser,update,delete语句
用户10175992
2023/10/17
2630
MySQL面试题
AI代码提示工具可用于教学功能示例——MySQL
当我们需要比较复杂的表的时候,且我们有明确的列信息,就可以使用AI工具直接生成我们的DDL语句,如果需要插入一些DML语句也可以直接让其生成,自行执行插入即可。
红目香薰
2024/05/26
1600
AI代码提示工具可用于教学功能示例——MySQL
MySQL从删库到跑路_高级(六)——索引
索引(Index)是帮助MySQL高效获取数据的数据结构。 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。MyISAM和InnoDB存储引擎只支持BTREE索引,MEMORY/HEAP存储引擎支持HASH和BTREE索引。    
良月柒
2019/03/19
1.2K0
MySQL从删库到跑路_高级(五)——触发器
触发器是和表关联的特殊的存储过程,可以在插入,删除或修改表中的数据时触发执行,比数据库本身标准的功能有更精细和更复杂的数据控制能力。
良月柒
2019/03/20
1.4K0
MySQL从删库到跑路_高级(五)——触发器
MySQL从删库到跑路(四)——MySQL数据库创建实例
创建数据库,指定数据库的默认字符集为utf8。 create database schoolDB default character set utf8; 连接数据库,客户端必须选择UTF8字符集。 数据库中的三张表分别为学生表(student)、课程表(TSubject)、分数表(TScore)。
良月柒
2019/03/20
2.5K0
MySQL从删库到跑路(四)——MySQL数据库创建实例
mysql的一些常用操作(二)
select course.cname '课程名称',count(*) '人数' from score,course where score.CId=course.CId group by score.CId
西西嘛呦
2020/08/26
4950
MySQL从删库到跑路(三)——SQL语言
SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言。 SQL语言的功能如下: A、SQL面向数据库执行查询 B、SQL可从数据库取回数据 C、SQL可在数据库中插入新的记录 D、SQL可更新数据库中的数据 E、SQL可从数据库删除记录 F、SQL可创建新数据库 G、SQL可在数据库中创建新表 H、SQL可在数据库中创建存储过程 I、SQL可在数据库中创建视图 J、SQL可以设置表、存储过程和视图的权限 SQL是一门ANSI的标准计算机语言,用来访问和操作数据库系统。SQL语句用于取回和更新数据库中的数据。SQL可与数据库程序协同工作,比如MS Access、DB2、Informix、MS SQL Server、Oracle、MySQL、Sybase以及其他数据库系统。 每一种数据库有自己版本的SQL语言,但是为了与ANSI标准相兼容,SQL必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE等等)。 除了SQL标准之外,大部分SQL数据库程序都拥有自己的私有扩展。
良月柒
2019/03/19
1.8K0
SQL语句 之 数据查询(二)多表查询—————–数据查询的重点 难点「建议收藏」
就拿上面的的student 表与 SC表来说 我们把他们合到一起 可以比较的列在一起进行比较,如果值相等,那么这列的元素所在的 行就会合并
全栈程序员站长
2022/09/01
1K0
SQL语句 之 数据查询(二)多表查询—————–数据查询的重点 难点「建议收藏」
浅谈 SQL Server 查询优化与事务处理
之前我们简单了解了各种查询的用法,然而在实际开发中还会用到一些比较高级的数据处理和查询,包括索引、视图、存储过程和触发器。从而能够更好地实现对数据库的操作、诊断及优化。
小手冰凉
2019/09/10
2K0
浅谈 SQL Server 查询优化与事务处理
数据库系统概述——第三章 关系数据库标准语言SQL(知识点复习+练习题)
🐳3、假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系(D)。
命运之光
2024/03/20
2580
数据库系统概述——第三章 关系数据库标准语言SQL(知识点复习+练习题)
推荐阅读
相关推荐
SQL笔试50题(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验