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、特殊用法
基于视图的查询,可以修改部分表结构,只要不是在视图中使用的字段,就不会影响视图的查询。
mysql视图实现的_mysql视图是什么?怎么实现?相关推荐
- mysql 视图调用存储过程_MySQL视图、存储过程
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 什么是视图(视图) 虚拟表 内容类似于真实表,有字段和记录 该视图不以数据库中存储的数据的形式存在 行和列的数据来自 ...
- MySQL查询与视图实验总结_MySQL 视图 总结
什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据. 数 ...
- mysql视图使用场景_MySQL视图适用场景
问题描述: MySQL视图适用于哪些场景? 解决方法: 1.视图能简化用户操作.视图机制使用户可以将注意力集中在所关心的数据上.如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简 ...
- mysql视图的简介_mysql视图简介
一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...
- mysql创建视图需注意_mysql视图创建注意事项
一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...
- mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程
1. 视图 视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来, ...
- mysql实验视图及索引_MySQL视图及索引
视图 视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据. 视图的作用.优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 //创建.修 ...
- mysql视图高级设置_MySQL 视图高级属性知多少?
Navicat 中的视图用于限制访问一组关联(表),就像一个单一的表,视图也可以用来限制访问行(一个特定表的子集).MySQL视图的高级属性主要涉及以下几点: Navicat 视图高级属性 算法 ● ...
- mysql 获取游标索引_MYSQL视图 事务 游标 索引及其使用
select * from(select nid,name from tb1 where nid > 2) As A where A.NAME > 'alex'; #创建视图 create ...
最新文章
- 多人开源博客系统再搜集
- python django设置中文及时区
- Windows 7备份、还原功能详解
- 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
- bat窗口大小设置_Tomcat的JVM和连接数设置
- 让Dapper在一个项目中支持多种库
- 2021-07-23 小记
- js 操作vuex数据_vue中使用vuex(超详细)
- python的应用领域和常用函数模块有哪些_Python模块导入区别与常用函数案例
- 【Linux】解决Linux上解压jdk报错gzip: stdin: not in gzip format
- 计算机视觉与机器视觉的区别和联系
- 自制树莓派PICO RP2040开发板+例程(I2C读取LM75和AHT20 温度数据)
- Java集合概览、实现细节、数据结构
- 基于 ffmpeg + Webassembly 实现前端视频帧提取
- mysql ERROR 1265 (01000)故障解决一例
- Python 自动识别图片文字—OCR实战教程
- NOIP2017day2题解
- 国内工业控制系统标准概述
- 学习REBOL 6.1
- 巡检路线排班问题matlab,基于数学建模的巡检线路排班设计
热门文章
- ASP.NET Core 生成验证码
- Entity Framework Core 执行SQL语句和存储过程
- .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
- Visual Studio 和 Team Foundation Server 产品维护及周期策略
- ASP.NET 开发人员不必担心 Node 的五大理由
- mysql505复位密码_mysql5 如何复位根用户密码[官方文档]
- 一名全栈工程师的必备“百宝箱”
- 西北师范大学地理与环境科学学院考研真题汇总(自然地理学)持续更新。。。
- C和指针之二维字符串数组用指针数组、数组指针、二级指针打印
- svn之check out没有下载so文件原因和解决办法