mysql视图实现的_mysql视图是什么?怎么实现?

mysql视图是什么?怎么实现?

发布时间:2020-05-21 18:00:24

来源:亿速云

阅读:152

作者:鸽子

视图本身是一张虚拟表,不存放任何数据。在使用SQL语句访问视图的时候,获取的数据是MySQL从其它表中生成的,视图和表在同一个命名空间。视图查询数据相对安全,可以隐藏一些数据和结构,只让用户看见权限内的数据,使复杂的查询易于理解和使用。

视图用法

如下基于用户和订单管理演示视图的基本用法。(在线学习视频教程分享:mysql视频教程)

基础表结构CREATE TABLE v01_user (

id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',

user_name VARCHAR(20) DEFAULT NULL COMMENT '用户名',

phone VARCHAR(20) DEFAULT NULL COMMENT '手机号',

pass_word VARCHAR(64) DEFAULT NULL COMMENT '密码',

card_id VARCHAR(18) DEFAULT NULL COMMENT '身份证ID',

pay_card VARCHAR(25) DEFAULT NULL COMMENT '卡号',

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '用户表';

CREATE TABLE v02_order (

id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',

user_id INT(11) NOT NULL COMMENT '用户ID',

order_no VARCHAR(32) DEFAULT NULL COMMENT '订单编号',

good_name VARCHAR(60) DEFAULT NULL COMMENT '商品名称',

good_id INT(11) DEFAULT NULL COMMENT '商品ID',

num INT(11) DEFAULT NULL COMMENT '购买数量',

total_price DECIMAL(10,2) DEFAULT NULL COMMENT '总价格',

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '订单表';

基本语法CREATE OR REPLACE VIEW view_name

AS select_statement

注意事项:表和视图共享数据库中相同的名称空间,因此,数据库不能包含具有相同名称的表和视图。

用户订单视图CREATE OR REPLACE VIEW user_order_view AS SELECT

t1.id,t1.user_name,t2.order_no,t2.good_id,

t2.good_name,t2.num,t2.total_price

FROM v01_user t1

LEFT JOIN v02_order t2 ON t2.user_id = t1.id;

视图调用

这里和MySQL的表查询基本一致,可以使用各种查询条件。SELECT * FROM user_order_view WHERE user_name='Cicada';

查看视图

SHOW CREATE VIEW user_order_view ;

修改视图

ALTER VIEW view_name AS select_statement ;

删除视图

DROP VIEW [IF EXISTS] view_name ;

视图更新

在指定条件允许的情况下,可以通过在视图上操作更新,删除,甚至写入数据,进而更新视图所涉及的相关表。UPDATE user_order_view SET user_name='smile' WHERE id='1';

这里就通过对视图执行更新操作,进而更新v01_user表数据。如果视图定义时使用聚合函数,分组等特殊操作,则无法更新。MySQL不支持在视图上创建触发器。

视图实现

1、临时表算法

服务器会把视图查询SQL的数据保存在临时表中,临时表的结构和视图字段结构一致,这样是SQL查询优化中最忌讳的操作,数据量稍微偏大,就会严重影响性能。如果视图无法和原有表产生一对一的映射关系,就会产生临时表,由此也可见视图并不是很简单,甚至是非常复杂的功能。

2、合并算法

服务器基于视图中使用的表执行查询,最后把查询结构合并后返回给客户端。

3、区别方法

执行如下查询语句,可以分析执行的性能参数。EXPLAIN SELECT * FROM user_order_view ;

观察查询结果中select_type字段,如果是DERIVED则说明使用临时表。这里SQL执行分析的语法后面优化部分再详解。

注意事项

1、性能问题

MySQL并不支持在视图中创建索引,使用视图的时候可能会引发很多查询性能问题,所以建议使用的时候要慎重,多角度审视和测试。

2、特殊用法

基于视图的查询,可以修改部分表结构,只要不是在视图中使用的字段,就不会影响视图的查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国人的数学为什么好,为什么不好

全世界有3.14 % 的人已经关注了数据与算法之美世界人民已经懒得吐槽美国学生的数学水平了,正如他们已习惯于惊叹中国学生的天才。脱离计算器就不会四则运算,把sinx/n算成“six”,美国学生闹的笑话层出不穷,每隔一段时间&#xff0…

.NET Core 调用百度 PaddleOCR 识别图文

了解 PaddleOCR 之前,首先了解一下 PaddlePaddle。飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套…

SQL SERVER2000存储过程调试

sql server2000存储过程调试基础条件启用SQLDebugger 账户账户,这个一般都是开启的;mssqlserver服务要求使用指定用户(不是本地系统用户),最好是administrator启动!这个资料上这么说。但我用本地系统用户也是可以的;登…

华为机试支持python吗_4.10华为暑期实习生机试题目,python解答

第一题是给一个字符串,然后按照次数和ascii码的顺序,循环输出。比如输入eeefffggh,由于ascii的大小,e efgh efg ef efghefgef。字符串中可包含数字和大小写英文字母。 思路是先用dict统计个数,然后将所有可能…

大数据时代,数据科学都有些啥?

暑假咻地一下过完啦,前几天,小天介绍了关于数模课程的开学季限时优惠(传送门),今天要介绍的是python课程。接下来,小天来详细说明一下!19月17日~23日报名《python机器学习实战》即可享受限时330…

那些被.NET大厂拒绝的大佬们,究竟弱在哪里?

如火如荼的金三银四跳槽季迎来尾声,几家欢喜几家愁,既看到腾讯阿里百度的大厂offer,又羡慕30k、40k、50k的高薪,更多其实还是各种面试失蹄的故事。成功的案例五花八门,而失败的原因却千篇一律。据统计,约70…

在python中strip_python中strip()函数怎么用?

python中strip()函数怎么用?发布时间:2020-05-19 16:57:38来源:亿速云阅读:182作者:Leah今天小编为大家分享的是python中strip()函数的使用方法。代码详细容易理解,为此分享给大家做个参考。一起跟随小编过…

ObjectiveC 深浅拷贝学习

(转自 http://woshao.com/article/f91898b24a1211e097d3000c2959fd2a/) 在ObjC中,什么是深浅拷贝?深浅拷贝分别指深拷贝和浅拷贝,即mutableCopy和copy方法。copy复制一个不可变对象,而mutableCopy复制一个m…

SQL语言最佳实践

为单位制订的SQL规范,分享一下。首先说一下,这是公司用的一个规范,给到程序员做参考的。其实,这个规范是建立在对SQL有一定熟悉程序的基础上的,所以规范本身并不涉及SQL语法学习的相关内容。1. 绝对避免使用 SELECT *S…

有哪些经济学理论可以用在谈恋爱上?

全世界有3.14 % 的人已经关注了数据与算法之美大概两周前回加拿大的航班上,我在机舱尾部跟一位空姐聊了很久。大概两周前回加拿大的航班上,我在机舱尾部跟一位空姐聊了很久。看到浮标沉下去了,我却把鱼竿放回地上,难道我是素食主义…

python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别

前言学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念但是与其他编程语言又有所不同全局变量与局部变量两者的本质区别就是在于作用域用通俗的话来理解的话,全局变量是在整…

port wifi to ICS(4.0.3)

去年移植了2.2。最近又刚刚移植了4.0.3。使用的是broadcom的bcm4329网卡。现把移植经历分享一下 1.该android.hardware.wifi.xml复制到out目录下 在相应的.mk文件中。添加 PRODUCT_COPY_FILES \ frameworks/base/data/etc/android.hardware.wifi.xml:$(PRODUCT_OUT)system/etc…

C# 离线使用nuget

正常在我们使用nuget进行程序集下载的时候,直接在vs编辑器中直接进行操作,下载自己想要的各种程序,但是某些时候,在进行一些办公时,公司要求本机编码不能进行联网操作,那么这种情况下我们怎么进行nuget程序…

21个令程序员泪流满面的瞬间

「1」公司实习生找 Bug「2」在调试时,将断点设置在错误的位置「3」当我有一个很棒的调试想法时 「4」偶然间看到自己多年前写的代码「5」当我第一次启动我的单元测试时「6」数据库的Delete语句忘了使用限定词where... 「7」明明是个小bug但就是死活修不好......「8…

python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路

前言有些时候为了研究不同高度上气象要素之间的联系,纬度-高度作为xy轴的图在一些SCI论文中比较常见。这是我研究的CMIP6数据中ua,va,wap,ta这几个气象要素在纬度-高度图上的不同。读取数据的地方就略去了,需要注意的是需要进行平均,温度转为…

新的一年

1、学习一种新语言,框架或方法 2、让你掌握的内容更精深 3、探索一个新的领域 4、参与社区 5、教导他人 6、更好地照顾自己 7、更好的管理自己的时间(以及其他资源)

.Net Core 集成 Kafka

最近维护的一个系统并发有点高,所以想引入一个消息队列来进行削峰。考察了一些产品,最终决定使用kafka来当做消息队列。以下是关于kafka的一些知识的整理笔记。kafkakafka 是分布式流式平台。它由linkedin开发,后贡献给了Apache开源组织并成为…

如果生活中没有数学,那么。。。

随着科技的快速发展,人工智能的重要性日渐显现。对于大多数新手来说,弄清楚入门人工智能需要哪些数学基础、需要熟悉什么框架等,都至关重要。机器学习是一个异常丰富的研究领域,有大量未解决的问题:公正、可解释性、易…

mysql5.6查看归档_MySQL5.6 使用 pt-archiver 分批删除、归档数据

pt-archiver是一个十分高效的表数据归档工具,归档数据可以分批进行事务处理,减少性能消耗;如果实例开启了GTID,因为GTID不支持CTAS创建表的语法,可以使用pt-archiver处理;对于跨实例或者跨服务器的表数据归…

Python学习笔记整理(三)Python中的动态类型简介

Python中只有一个赋值模型 一、缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明。这意味着没有必要事声明变量。只要记住,这个概念实质上对变量,对象和它们之间的关系都适用。那么这个概念也…