前言

视图是数据库系统中一种非常有用的数据库对象。MySQL 5.0 之后的版本添加了对视图的支持。

认识视图

视图是一个虚拟表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据,但视图并不是数据库真实存储的数据表。

视图是从一个、多个表或者视图中导出的表,包含一系列带有名称的数据列和若干条数据行。

视图并不同于数据表,它们的区别在于以下几点:

视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。

存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。

视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。

视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。

视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。

视图的建立和删除只影响视图本身,不影响对应的基本表。

视图与表在本质上虽然不相同,但视图经过定义以后,结构形式和表一样,可以进行查询、修改、更新和删除等操作。

1、准备工作

在MySQL数据库中创建两张表balance(余额表)和customer(客户表)并插入数据。

create table customer(

id int(10) primary key,

name char(20) not null,

role char(20) not null,

phone char(20) not null,

sex char(10) not null,

address char(50) not null

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#外键为customerId

create table balance(

id int(10) primary key,

customerId int(10) not null,

balance DECIMAL(10,2),

foreign key(customerId) references customer(id)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

向客户表和余额表中各插入3条数据。

insert into customer values(0001,"xiaoming",'vip1','12566666','male','江宁区888号');

insert into customer values(0002,"xiaohong",'vip10','15209336760','male','建邺区888号');

insert into customer values(0003,"xiaocui",'vip11','15309336760','female','新街口888号');

insert into balance values(1,0001,900.55);

insert into balance values(2,0002,900.55);

insert into balance values(3,0003,10000);

2、视图简介

视图可以简单理解成虚拟表,它和数据库中真实存在数据表不同,视图中的数据是基于真实表查询得到的。视图和真实表一样具备相似的结构。真实表的更新,查询,删除等操作,视图也支持。那么为什么需要视图呢?

a、提升真实表的安全性:视图是虚拟的,可以只授予用户视图的权限而不授予真实表的权限,起到保护真实表的作用。

b、定制化展示数据:基于同样的实际表,可以通过不同的视图来向不同需求的用户定制化展示数据。

c、简化数据操作:适用于查询语句比较复杂使用频率较高的场景,可以通过视图来实现。

......

需要说明一点的是:视图相关的操作需要用户具备相应的权限。以下操作使用root用户,默认用户具备操作权限。

创建视图语法

create view   as ;

修改视图语法

修改视图名称可以先删除,再用相同的语句创建。

#更新视图结构

alter view as ;

#更新视图数据相当于更新实际表,不适用基于多表创建的视图

update ....

注意:部分视图的数据是无法更新,也就是无法使用update,insert等语句更新,比如:

a、select语句包含多个表

b、视图中包含having子句

c、试图中包含distinct关键字

......

删除视图语法

drop view

3、视图的操作

基于单表创建视图

mysql> create view bal_view

-> as

-> select * from balance;

Query OK, 0 rows affected (0.22 sec)

创建完成后,查看bal_view的结构和记录。可以发现通过视图查询到数据和通过真实表查询得到的结果完全一样。

#查询bal_view的结构

mysql> desc bal_view;

+------------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+------------+---------------+------+-----+---------+-------+

| id | int(10) | NO | | NULL | |

| customerId | int(10) | NO | | NULL | |

| balance | decimal(10,2) | YES | | NULL | |

+------------+---------------+------+-----+---------+-------+

3 rows in set (0.07 sec)

#查询bal_view中的记录

mysql> select * from bal_view;

+----+------------+----------+

| id | customerId | balance |

+----+------------+----------+

| 1 | 1 | 900.55 |

| 2 | 2 | 900.55 |

| 3 | 3 | 10000.00 |

+----+------------+----------+

3 rows in set (0.01 sec)

通过创建视图的语句不难得出结论:当真实表中的数据发生改变时,视图中的数据也会随之改变。那么当视图中的数据发生改变时,真实表中的数据会变化吗?来实验一下,修改id=1的客户balance为2000。

mysql> update bal_view set balance=2000 where id=1;

Query OK, 1 row affected (0.05 sec)

Rows matched: 1 Changed: 1 Warnings: 0

来看一下真实表balance中的数据。

mysql> select * from bal_view where id=1;

+----+------------+---------+

| id | customerId | balance |

+----+------------+---------+

| 1 | 1 | 2000.00 |

+----+------------+---------+

1 row in set (0.03 sec)

结论:视图表中的数据发生变化时,真实表中的数据也会随之改变。

基于多表创建视图

创建视图cus_bal,共两个字段客户名称和余额。

mysql> create view cus_bal

-> (cname,bal)

-> as

-> select customer.name,balance.balance from customer ,balance

-> where customer.id=balance.customerId;

Query OK, 0 rows affected (0.05 sec)

#查看cus_bal中的数据

mysql> select * from cus_bal;

+----------+----------+

| cname | bal |

+----------+----------+

| xiaoming | 2000.00 |

| xiaohong | 900.55 |

| xiaocui | 10000.00 |

+----------+----------+

3 rows in set (0.28 sec)

修改视图

将cus_bal视图中的cname改成cusname。

mysql> alter view cus_bal

-> (cusname,bal)

-> as

-> select customer.name,balance.balance from customer ,balance

-> where customer.id=balance.customerId;

Query OK, 0 rows affected (0.06 sec)

#查看修改后视图结构。

mysql> desc cus_bal;

+---------+---------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+---------------+------+-----+---------+-------+

| cusname | char(20) | NO | | NULL | |

| bal | decimal(10,2) | YES | | NULL | |

+---------+---------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

修改基于多表创建的视图

mysql> insert into cus_bal(cusname,bal) values ("ee",11);

ERROR 1393 (HY000): Can not modify more than one base table through a join view 'rms.cus_bal'

删除视图

删除视图cus_bal

drop view cus_bal;

mysql> drop view cus_bal;

Query OK, 0 rows affected (0.00 sec)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

您可能感兴趣的文章:MySQL笔记之视图的使用详解

MySQL中视图的使用及多表INNER JOIN的技巧分享

MySQL中索引与视图的用法与区别详解

mysql触发器实现oracle物化视图示例代码

基于mysql事务、视图、存储过程、触发器的应用分析

mysql视图原理与用法实例小结

详解Mysql中的视图

Mysql事项,视图,函数,触发器命令(详解)

MySQL视图原理与基本操作示例

mysql视图功能与用法实例分析

mysql 视图 教程_MySQL视图简介及基本操作教程相关推荐

  1. mysql 视图优势_MySQL视图简介及优缺点

    在本教程中,您将了解一个叫作数据库视图的新数据库对象. 我们将讨论使用数据库视图的优缺点. 数据库视图是虚拟表或逻辑表,它被定义为具有连接的SQL SELECT查询语句. 因为数据库视图与数据库表类似 ...

  2. mysql视图登录_mysql视图

    mysql视图机制 什么是视图 视图是一张虚拟的表,为什么是虚拟呢?因为视图与数据库中存在的表不太一样,前面我们创建的4张表都是包含数据的, 如用户信息,订单信息等,而视图则是不包含数据的,下面通过一 ...

  3. mysql 视图用户_MySQL视图,存储过程,用户管理

    1. 视图 一张虚拟表,就是将一个经常被使用的查询作为一个虚拟表,开发者查询的时候不需要再次书写SQL,而是直接调用对应的视图就可,调用视图以后MySQL会执行这个查询SQL. # 创建视图 crea ...

  4. mysql视图存储_Mysql 视图、存储过程以及权限控制

    导读: 该文章为视图.存储过程.用户权限练习: 如果有不对的地方欢迎指出与补充: 该基础练习基于MySQL5.0以上: 语句格式: 1. 视图格式: create view view_name[列名, ...

  5. mysql视图应用_MySQL视图的概念与实际应用

    以下的文章主要是对MySQL视图的描述,其中包括MySQ视图L概述,以及创建MySQL视图-create view与修改MySQL视图--alter view等相关内容的具体描述,以下就是文章的具体内 ...

  6. mysql 视图 中文_Mysql视图-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    1.初识视图 1.视图的概念和作用 什么是视图:是从一个或多个表中导出来的表,它是一种虚拟存在的表,表的结构和数据都依赖于基本表. 作用: 简化查询语句:简化用户的查询操作,使 1.初识视图 1.视图 ...

  7. mysql 视图 排序_MySQL 视图

    视图(view): 什么是视图: 视图就是将查询的结果集展示出来,视图就是一张表 为什么需要视图: 首先,视图并不能加快查询速度,因为视图中本身不存储数据 视图仅仅是村粗再数据字典中的一个定义,同时视 ...

  8. mysql视图参数_MySQL视图概述

    1.介绍 在传统关系型数据库里,视图有时也被称作虚表,是基于特定SQL结果集的虚拟数据表.在有些场合会变得很方便,例如:原有系统重构,旧的数据表A和B已经被拆分和合并到数据表C.D.F里面,为了实现平 ...

  9. mysql 视图查询_MySQL视图复杂查询详解

    内容大纲:什么是视图查询 子查询 标量子查询 关联子查询 如何用SQL解决业务问题 各种函数 总结:知识点图解 视图什么是视图 视图存放的是SQL语句,而数据库表存放的是数据,使用视图时,会运行视图里 ...

最新文章

  1. R语言使用dplyr包基于因子变量(factor)将原dataframe拆分为每一个因子对应的单独数据集dataframe实战
  2. 关于Python3.9,看这张16岁高中生做的「新特性必知图」就够了
  3. linux中录屏工具byzanz
  4. 4测试命令_局域网带宽测试工具-iPerf3
  5. JavaScript从入门到精通之入门篇(一)概念与语法
  6. (201)数字6种表示方式
  7. Quartus报错Error (170040): Can‘t place all RAM cells in design Info (170034)的解决办法
  8. Redis的安装(windows)
  9. 国外十大流行的服务器监控工具
  10. 银河麒麟系统如何取得终端的root权限和查看所有服务状态
  11. TigerGraph集群安装
  12. python实现根据excel内容批量生成二维码
  13. Vue+websocket+django实现WebSSH demo
  14. Joomla 漏洞总结
  15. 【Verilog】inout 端口信号的使用
  16. nginx入门-个人总结
  17. MAC下HFS,HFS+,HFSX文件系统 解析
  18. shell-定时备份数据库发送至邮箱
  19. 玩《Minecraft我的世界》学python编程,可免费领|取电子学习版本
  20. 软考高级 真题 2010年下半年 信息系统项目管理师 案例分析

热门文章

  1. oracle下lag和lead分析函数
  2. 数字化工厂的五大系统_如何搭建以MES系统为核心的数字化工厂?
  3. php如何输出复选框的值,php 怎么输出复选框呢?
  4. 罗马音平假名片假名转换器_关于五十音你所要知道的一切!文末附日网高清字帖...
  5. [转载] python中的数组类型及特点
  6. shell -eom_EOM的完整形式是什么?
  7. python 示例_带有示例的Python File read()方法
  8. echarts 柱状图不显示y坐标轴_Python+matplotlib自定义坐标轴位置、颜色、箭头
  9. mysql gtid配置_mysql 5.7 GTID主从配置
  10. python批量雷达图_python批量制作雷达图