当前位置:首页 > 生活 >

使用视图的好处(基本视图的主要作用)

来源:原点资讯(www.yd166.com)时间:2024-05-20 22:49:43作者:YD166手机阅读>>

概述

今天介绍下mysql视图方面的内容,通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。


01特性

视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);

可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制);


02作用

方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;

更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别;


03使用场合

权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary...

关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;


04实例1-创建视图及查询数据操作

现有三张表:用户(user)、课程(course)、用户课程中间表(user_course),表结构及数据如下:

表定义:

-- ---------------------------- -- Table structure for `course` -- ---------------------------- DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL, `description` varchar(500) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of course -- ---------------------------- INSERT INTO `course` VALUES ('1', 'JAVA', 'JAVA课程'); INSERT INTO `course` VALUES ('2', 'C ', 'C 课程'); INSERT INTO `course` VALUES ('3', 'C语言', 'C语言课程'); -- ---------------------------- -- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `account` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `address` varchar(255) DEFAULT NULL, `others` varchar(200) DEFAULT NULL, `others2` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'user1', '小陈', '美国', '1', '1'); INSERT INTO `user` VALUES ('2', 'user2', '小张', '日本', '2', '2'); INSERT INTO `user` VALUES ('3', 'user3', '小王', '中国', '3', '3'); -- ---------------------------- -- Table structure for `user_course` -- ---------------------------- DROP TABLE IF EXISTS `user_course`; CREATE TABLE `user_course` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `userid` bigint(20) NOT NULL, `courseid` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user_course -- ---------------------------- INSERT INTO `user_course` VALUES ('1', '1', '2'); INSERT INTO `user_course` VALUES ('2', '1', '3'); INSERT INTO `user_course` VALUES ('3', '2', '1'); INSERT INTO `user_course` VALUES ('4', '2', '2'); INSERT INTO `user_course` VALUES ('5', '2', '3'); INSERT INTO `user_course` VALUES ('6', '3', '2');

使用视图的好处,基本视图的主要作用(1)

表数据:

使用视图的好处,基本视图的主要作用(2)

当我们想要查询小张上的所以课程相关信息的时候,需要写一条很长的SQL语句,如下:

SELECT `uc`.`id` AS `id`, `u`.`name` AS `username`, `c`.`name` AS `coursename` FROM `user` `u` LEFT JOIN `user_course` `uc` ON ((`u`.`id` = `uc`.`userid`)) LEFT JOIN `course` `c` ON ((`uc`.`courseid` = `c`.`id`)) WHERE u.`name` = '小张'

使用视图的好处,基本视图的主要作用(3)

但是我们可以通过视图简化操作,例如创建视图view_user_course如下:

-- ---------------------------- -- View structure for `view_user_course` -- ---------------------------- DROP VIEW IF EXISTS `view_user_course`; CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `view_user_course` AS ( SELECT `uc`.`id` AS `id`, `u`.`name` AS `username`, `c`.`name` AS `coursename` FROM ( ( `user` `u` LEFT JOIN `user_course` `uc` ON ((`u`.`id` = `uc`.`userid`)) ) LEFT JOIN `course` `c` ON ((`uc`.`courseid` = `c`.`id`)) ) );

几点说明(MySQL中的视图在标准SQL的基础之上做了扩展):

ALGORITHM=UNDEFINED:指定视图的处理算法;

DEFINER=`root`@`localhost`:指定视图创建者;

SQL SECURITY DEFINER:指定视图查询数据时的安全验证方式;

创建好视图之后可以直接用以下SQL语句在视图上查询小张上的所以课程相关信息,同样可以得到所需结果:

SELECT vuc.username, vuc.coursename FROM view_user_course vuc WHERE vuc.username = '小张'

使用视图的好处,基本视图的主要作用(4)


05实例2-增删改数据操作

尝试在视图view_user_course上做增删改数据操作,如下:

update view_user_course set username='test',coursename='JAVASCRIPT' where id=3

操作失败,提示错误信息如下:

[SQL] update view_user_course set username='test',coursename='JAVASCRIPT' where id=3 [Err] 1393 - Can not modify more than one base table through a join view 'demo.view_user_course'

因为不能在一张由多张关联表连接而成的视图上做同时修改两张表的操作;

那么哪些操作可以在视图上进行呢?

视图与表是一对一关系情况:如果没有其它约束(如视图中没有的字段,在基本表中是必填字段情况),是可以进行增删改数据操作;

如创建用户关键信息视图view_user_keyinfo,如下:

-- ---------------------------- -- View structure for `view_user_keyinfo` -- ---------------------------- DROP VIEW IF EXISTS `view_user_keyinfo`; CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY DEFINER VIEW `view_user_keyinfo` AS SELECT `u`.`id` AS `id`, `u`.`account` AS `account`, `u`.`name` AS `username` FROM `user` `u`;

进行增删改操作如下,操作成功(注意user表中的其它字段要允许为空,否则操作失败):

INSERT INTO view_user_keyinfo (account, username) VALUES ('test1', 'test1'); DELETE FROM view_user_keyinfo WHERE username = 'test1'; UPDATE view_user_keyinfo SET username = 'updateuser' WHERE id = 1

视图与表是一对多关系情况:如果只修改一张表的数据,且没有其它约束(如视图中没有的字段,在基本表中是必填字段情况),是可以进行改数据操作,如以下语句,操作成功;

update view_user_course set coursename='JAVA' where id=1; update view_user_course set username='test2' where id=3;

以下操作失败:

delete from view_user_course where id=3; insert into view_user_course(username, coursename) VALUES('2','3');


总结

视图这个概念还是比较容易理解的,也没啥好讲,主要注意一下视图中的查询语句性能要调到最优,修改视图操作时要小心,不经意可能会修改了基本表里的多条数据。。。

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

使用视图的好处,基本视图的主要作用(5)

,

栏目热文

国内滤波器公司排名(国内滤波器最好的公司)

国内滤波器公司排名(国内滤波器最好的公司)

滤波器因材料和工艺的不同,可以分为:金属腔体滤波器、介质腔体滤波器、介质滤波器;金属腔体滤波器:尺寸大、介电损耗大、温度...

2024-05-20 22:27:47查看全文 >>

洗衣机滤波器的作用是什么(洗衣机滤波器坏了症状)

洗衣机滤波器的作用是什么(洗衣机滤波器坏了症状)

1.滤波器工程上根据输出端口对信号频率范围的要求,设计专门的网络,置于输入—输出端口之间,使输出端口所需要的频率分量能够...

2024-05-20 22:36:04查看全文 >>

滤波柜与补偿柜区别(滤波补偿柜和谐波补偿柜的区别)

滤波柜与补偿柜区别(滤波补偿柜和谐波补偿柜的区别)

提及低压电容补偿柜,想必大部分电气人员都非常熟悉了。但是如果说到低压电容补偿柜的作用和组成,可能不少电气小白都是云里雾里...

2024-05-20 22:42:24查看全文 >>

滤波器的工作原理(滤波器输出是直流还是交流电)

滤波器的工作原理(滤波器输出是直流还是交流电)

滤波器是一种用于改变信号频谱特性的电路或算法。它可以通过增强或抑制特定频率范围内的信号来实现信号处理、降噪、去除干扰等功...

2024-05-20 22:41:50查看全文 >>

交流电源滤波器的作用(交流滤波器的作用和工作原理)

交流电源滤波器的作用(交流滤波器的作用和工作原理)

电源滤波器又称“电源EMI滤波器”。是抑制电气噪声干扰的常用设备。由电容、电感和电阻组成。它的作用是:对特定频率的频点或...

2024-05-20 22:13:16查看全文 >>

视图的四种用途(常用视图有哪四种)

视图的四种用途(常用视图有哪四种)

1.在PowerPoint2010中,用户在各种视图间进行切换的主要方法是什么?答:(1)通过“视图”选项卡进行,这种方...

2024-05-20 22:21:14查看全文 >>

视图的功能是什么(视图检查功能有什么用)

视图的功能是什么(视图检查功能有什么用)

obs的多视图窗口。这个窗口有什么作用?比如有多场景、多机位,像那些大主播,人家画面为什么好看?什么角度好看?这里放大来...

2024-05-20 22:21:24查看全文 >>

视图主要表达作用(视图主要用于表达物体的什么结构形状)

视图主要表达作用(视图主要用于表达物体的什么结构形状)

我们在学习和办公中常常使用WPS演示制作幻灯片。它可以以文字、图形、色彩、动画等方式将需要表达的内容更加直观、形象的进行...

2024-05-20 22:56:44查看全文 >>

视图的主要用途(视图的作用与功能)

视图的主要用途(视图的作用与功能)

我们如果打开多个工作簿,我们可以使用Ctrl Tab 进行切换,但是在切换的时候不一定能切换到你想用的那个我们如何解决这...

2024-05-20 22:26:37查看全文 >>

视图分别在什么情况下使用(查看视图的定义信息使用什么选项)

视图分别在什么情况下使用(查看视图的定义信息使用什么选项)

视图(View) 是一种虚拟的表,它的内容由查询定义,但不存储实际的数据。视图是从一个或多个基本表(或其他视图)生成的。...

2024-05-20 22:54:43查看全文 >>

文档排行