mysql 视图 教程_MySQL视图简介及基本操作教程

前言

视图是数据库系统中一种非常有用的数据库对象。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视图功能与用法实例分析

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

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

相关文章

计算机科学导论考试A卷试题,09级计算机科学导论A卷答案

《计算机科学导论》试卷A参考答案一、单选题:(每题1分,共30分)1~5 CBCCD 6~10 ABABC 11~15 DCCDD 16~20 BBBAC 21~25 DDCDC 26~30 ACABC二、填空题:(每空1分,共20分) 1.322.ROM RAM 3.地址4&…

java中连接mysql数据库_java中怎么连接mysql数据库

展开全部import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.text.SimpleDateFormat;import java.util.Date;public class JDBCMySQL {// 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中public static fi…

html文件打开多出很多数字,【求助】页面上显示几个数字,打开html的时候希望能滚动起来...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼*{padding: 0;margin: 0;}div{width:60px;height:50px;border:1px solid red;overflow: hidden;position: relative;margin: 200px 400px;}ul{width:200px;height:20px;float:left;position: absolute;}li{width:10px;height:20px;…

word 转 html cms,Java 将Word文件转换为HTML格式文件

前言:在很多时候我们都需要到项目中导入word文档,但是后期再次在前段显示这个文档的时候前端往往需要的是html格式的,所以这个时候就会提出一个需求: 你们存文档的时候能不能存成html格式的? 于是这篇文章的内容就可以…

mysql 中函数如何转存_mysql 导入导出数据库以及函数、存储过程 【转】

MySQL常用导出数据命令:1.mysql导出整个数据库mysqldump -hhostname -uusername -ppassword databasename > backupfile.sqlmysqldump -hlocalhost -uroot hqgr> hqgr.sql (如果root用户没用密码可以不写-p,当然导出的sql文件你可以制定一个路…

1500度的近视能学计算机吗,1500度近视考驾照,近视多少度不能考驾照

情人眼里出西施,所以眼睛的地位真的无可替代,让我们认识了这个五彩缤纷的世界。但是也有一批深度近视的人群,他们也想像常人一样考取驾照,掌握这个社会的基本技能。有的人说近视1500度不能考取驾照,真的是这样吗&#…

mysql怎样实现先判断后联合_MYSQ创建联合索引,字段的先后顺序,对查询的影响分析...

MYSQ创建联合索引,字段的先后顺序,对查询的影响分析前言对于联合索引我们知道,在使用的时候有一个最左前缀的原则,除了这些呢,比如字段放置的位置,会不会对索引的效率产生影响呢?最左匹配原则联…

上海事业编制 计算机 待遇怎么样,事业单位情况

2010-09-12我们在公路系统工作,用工单位是事业单位编制,由上级部门批准招录下达指标。由于单位缺人,单位临时招录我们(不带指标),我们已工作八年,自2003-2009一直签订合同,2009年到期后至今未签订合同&…

mysql count count id_mysql 为什么count(*)快于count(id)

其实,挺正常的,count的用法大概有两个,不过一般大家不太注意:统计某个列( 俗称字段 )有多少个有效值,也就是值不是null的有多少个。统计记录有多少行,我背诵过的规则是这样的:当count()括弧的表…

如何修改操作系统运行服务器,如何设置Bios 最常见bios设置与修改详细图解教程...

平时我们在使用计算机的时候一般很少会接触到BIOS,很多人都是在安装操作系统时才接触到的,因为在使用光盘安装系统时需将计算机的BIOS设置为从光驱启动,在重装系统、设置硬盘模式以及一些特殊情况都需要进入bios里面,进行相关设置…

mysql 回滚失败_Mysql非事务表回滚失败的现象

执行ROLLBACK(回滚)时,如果收到下述消息,表示事务中使用的1个或多个表不支持事务: 警告:某些更改的非事务性表不能被回滚。 这些非事务性表不受ROLLBACK语句的影响。 如果在事务中意外地混合了事务性表和非事务性表,导…

在线服务器和客户端聊天,实验三、客户端和服务器能实现简单的聊天功能

《实验三、客户端和服务器能实现简单的聊天功能》由会员分享,可在线阅读,更多相关《实验三、客户端和服务器能实现简单的聊天功能(6页珍藏版)》请在人人文库网上搜索。1、实验三、客户端和服务器能实现简单的聊天功能1、实验目的:熟悉基于流式…

mysql连表查询on条件_mysql 外连接的时候,条件在on后面和条件在where后面的区别...

最近使用mysql的时候碰到一个问题:当一个表外联另一个表的时候,将一些查询条件放在on后面和放在where后面不太一样:学生分数表stuscore:当查询语句如下(查询语句1):SELECT a.name,a.subject,a.score,a.stuid ,b.name,b…

应运ajax的几种语言,Ajax指的是什么

Ajax指的是什么发布时间:2020-08-05 14:18:52来源:亿速云阅读:103作者:小新这篇文章将为大家详细讲解有关Ajax指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可…

oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...

这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧方法一:利用PL/SQL Developer工具导出:菜单栏---->Tools---->Export Tables,如下…

iphone文件怎么上传到服务器,iPhone编程中文件上传到HTTP服务器

宝慕林4294392下面的代码使用HTTPPOST将NSData发布到Web服务器。您还需要一些PHP方面的知识。NSString *urlString "http://yourserver.com/upload.php";NSString *filename "filename";request [[[NSMutableURLRequest alloc] init] autorelease];[requ…

tomcat 启动项目 页面文字乱码_项目通过tomcat部署到服务器,请求数据页面中文乱码问题...

问题描述:1、将项目部署到服务器之后从页面接收的中文乱码2、数据库中原有的数据都能正常显示产生原因:没有对Tomcat服务器和mysql进行配置更改解决流程:一、 修改Tomcat配置更改两个文件的配置1.server.xml(添加红色部分)URIEncoding"U…

小米手机文件 ftp服务器,小米手机与电脑FTP连接(不用每一次都输入ftp地址)...

用过小米miui的用户都知道,miui的“文件管理”里边有一个非常好用的功能-远程管理,如果手机与电脑都在同一个wifi网络下,即同一个局域网内,不用数据线直接就可以连接。打开手机的文件管理—远程管理—启动服务,将生成一…

第五人格服务器维修中怎么进,第五人格进不去怎么办 游戏进不去解决方法详解[多图]...

第五人格开启测试已经有一段时间,许多玩家都会遇到各种问题,其中游戏进不去是让玩家最头痛的,今天安族小编来给大家介绍一下游戏进不去解决方法详解。第五人格进不去解决方法大家在玩的时候,肯定都会遇到卡顿、进不去或者是不能玩…

mysql数据库查询语句过程_mysql(一) SQL查询语句执行过程

mysql基础架构 示意图首先 mysql 大概分为 server层 和 存储引擎层 两个部分, 引擎的架构模式是插件形式的,mysql支持多种引擎如 InnoDB、MyISAM、Memory 等,其中 Innodb是应用最广泛的,mysql5.5.5版本后,将Innodb设为…