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视图是什么?怎么实现?相关推荐

  1. mysql 视图调用存储过程_MySQL视图、存储过程

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 什么是视图(视图) 虚拟表 内容类似于真实表,有字段和记录 该视图不以数据库中存储的数据的形式存在 行和列的数据来自 ...

  2. MySQL查询与视图实验总结_MySQL 视图 总结

    什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据. 数 ...

  3. mysql视图使用场景_MySQL视图适用场景

    问题描述: MySQL视图适用于哪些场景? 解决方法: 1.视图能简化用户操作.视图机制使用户可以将注意力集中在所关心的数据上.如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简 ...

  4. mysql视图的简介_mysql视图简介

    一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...

  5. mysql创建视图需注意_mysql视图创建注意事项

    一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...

  6. mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程

    1. 视图 视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来, ...

  7. mysql实验视图及索引_MySQL视图及索引

    视图 视图就是一个表或多个表的查询结果,它是一张虚拟的表,因为它并不能存储数据. 视图的作用.优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 //创建.修 ...

  8. mysql视图高级设置_MySQL 视图高级属性知多少?

    Navicat 中的视图用于限制访问一组关联(表),就像一个单一的表,视图也可以用来限制访问行(一个特定表的子集).MySQL视图的高级属性主要涉及以下几点: Navicat 视图高级属性 算法 ● ...

  9. mysql 获取游标索引_MYSQL视图 事务 游标 索引及其使用

    select * from(select nid,name from tb1 where nid > 2) As A where A.NAME > 'alex'; #创建视图 create ...

最新文章

  1. 多人开源博客系统再搜集
  2. python django设置中文及时区
  3. Windows 7备份、还原功能详解
  4. 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
  5. bat窗口大小设置_Tomcat的JVM和连接数设置
  6. 让Dapper在一个项目中支持多种库
  7. 2021-07-23 小记
  8. js 操作vuex数据_vue中使用vuex(超详细)
  9. python的应用领域和常用函数模块有哪些_Python模块导入区别与常用函数案例
  10. 【Linux】解决Linux上解压jdk报错gzip: stdin: not in gzip format
  11. 计算机视觉与机器视觉的区别和联系
  12. 自制树莓派PICO RP2040开发板+例程(I2C读取LM75和AHT20 温度数据)
  13. Java集合概览、实现细节、数据结构
  14. 基于 ffmpeg + Webassembly 实现前端视频帧提取
  15. mysql ERROR 1265 (01000)故障解决一例
  16. Python 自动识别图片文字—OCR实战教程
  17. NOIP2017day2题解
  18. 国内工业控制系统标准概述
  19. 学习REBOL 6.1
  20. 巡检路线排班问题matlab,基于数学建模的巡检线路排班设计

热门文章

  1. ASP.NET Core 生成验证码
  2. Entity Framework Core 执行SQL语句和存储过程
  3. .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
  4. Visual Studio 和 Team Foundation Server 产品维护及周期策略
  5. ASP.NET 开发人员不必担心 Node 的五大理由
  6. mysql505复位密码_mysql5 如何复位根用户密码[官方文档]
  7. 一名全栈工程师的必备“百宝箱”
  8. 西北师范大学地理与环境科学学院考研真题汇总(自然地理学)持续更新。。。
  9. C和指针之二维字符串数组用指针数组、数组指针、二级指针打印
  10. svn之check out没有下载so文件原因和解决办法