当前位置: 首页 > news >正文

mysql视图代码_MySQL视图简介与操作的介绍(附代码)

本篇文章给大家带来的内容是关于MySQL视图简介与操作的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

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;#外键为customerIdcreate 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_baldrop view cus_bal;mysql> drop view cus_bal;Query OK, 0 rows affected (0.00 sec)

【相关推荐:MySQL教程】

相关文章:

  • mysql密码存储过程_mysql设置用户名密码,存储过程,触发器
  • sqlserver mysql 乱码_SqlServer数据库中文乱码问题解决
  • oracle与mysql跨库连接_PostgreSQL+Oracle跨库连接实操
  • php mysql 域名空间_域名空间pipni.cz申请和使用攻略(MYSQL+PHP+CGI+mail+FTP)
  • mysql条件删除表中某些行数据_根据MySQL中的条件仅删除表中的某些行
  • mysql pdo rowcount_PDO rowCount()在MySQL上有效,但在SQL Server 2008 R...
  • mysql+数据库索引策略_mysql数据库索引
  • 企业组织架构mysql_[MySQL] 数据目录的组织架构
  • matlab一维搜索_工程优化设计与Matlab实现——一维搜索方法(黄金分割法)
  • mysql源码索引_Mysql中的索引
  • python3.5如何安装pip管理工具_python3.5.2安装pip管理工具
  • vue watch监听对象的属性_手把手教你深入Vue中对比computed和watch属性的区别
  • python自媒体混剪视频_自媒体短视频运营中的混剪怎么做?我们又该如何去寻找素材呢?...
  • mysql延迟同步sql_delay_彻底终结MySQL同步延迟问题
  • java 接口发布_HTTP接口的发布,用Javaweb如何实现?
  • angular学习第一篇-----环境搭建
  • Apache Spark Streaming 使用实例
  • centos安装java运行环境jdk+tomcat
  • CSS 提示工具(Tooltip)
  • docker-consul
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Flannel解读
  • Linux快速复制或删除大量小文件
  • redis学习笔记(三):列表、集合、有序集合
  • Vue ES6 Jade Scss Webpack Gulp
  • VuePress 静态网站生成
  • vue-router 实现分析
  • 阿里云购买磁盘后挂载
  • 安卓应用性能调试和优化经验分享
  • 程序员最讨厌的9句话,你可有补充?
  • 技术胖1-4季视频复习— (看视频笔记)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 优化 Vue 项目编译文件大小
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​水经微图Web1.5.0版即将上线
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (五)关系数据库标准语言SQL
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)关于pipe()的详细解析
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .htaccess 强制https 单独排除某个目录
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .Net中ListT 泛型转成DataTable、DataSet
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @Valid和@NotNull字段校验使用
  • @我的前任是个极品 微博分析
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务