Mysql数据库(六)视图
一、视图是由数据库中的一个表或多个表导出的虚拟表。其作用是方便用户对数据的操作。
1.视图的概念
2.视图的作用
二、创建视图
创建视图是指在已经存在的数据表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
1.查看创建视图的权限
- mysql> SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user='root';
- +-------------+------------------+
- | Select_priv | Create_view_priv |
- +-------------+------------------+
- | Y | Y |
- +-------------+------------------+
- 1 row in set (0.01 sec)
结果中两列的值都为Y,这表明root用户具有Select(查看)和Create_view(创建视图)的权限。
2.创建视图
- mysql> SELECT * FROM tb_bookinfo;
- +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
- | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id |
- +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
- | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 |
- | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 |
- | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 |
- +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
- 3 rows in set (0.00 sec)
- mysql> SELECT * FROM tb_borrow;
- +----+----------+--------+------------+------------+----------+--------+
- | id | readerid | bookid | borrowTime | backTime | operator | ifback |
- +----+----------+--------+------------+------------+----------+--------+
- | 1 | 1 | 1 | 2018-04-17 | 2018-04-20 | mr | 1 |
- | 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 0 |
- +----+----------+--------+------------+------------+----------+--------+
- 2 rows in set (0.00 sec)
- mysql> CREATE VIEW
- -> v_book(barcode,bookname,author,price,bookcase,borrowTime,backTime)
- -> AS SELECT barcode,bookname,author,price,bookcase,borrowTime,backTime
- -> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id;
- Query OK, 0 rows affected (0.53 sec)
- mysql> SELECT * FROM v_book;
- +----------+-----------+-----------+-------+----------+------------+------------+
- | barcode | bookname | author | price | bookcase | borrowTime | backTime |
- +----------+-----------+-----------+-------+----------+------------+------------+
- | 17120108 | Lian | QiaoJiang | 50.00 | 2 | 2018-04-17 | 2018-04-20 |
- | 17120109 | Tian King | TianJiang | 51.10 | 3 | 2018-04-16 | 2018-04-21 |
- +----------+-----------+-----------+-------+----------+------------+------------+
- 2 rows in set (0.00 sec)
3.创建视图的注意事项
三、视图操作
1.查看视图
(1)DESCRIBE语句
- mysql> DESC v_book;
- +------------+------------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +------------+------------------+------+-----+---------+-------+
- | barcode | varchar(30) | YES | | NULL | |
- | bookname | varchar(70) | YES | | NULL | |
- | author | varchar(30) | YES | | NULL | |
- | price | float(8,2) | YES | | NULL | |
- | bookcase | int(10) unsigned | YES | | NULL | |
- | borrowTime | date | YES | | NULL | |
- | backTime | date | YES | | NULL | |
- +------------+------------------+------+-----+---------+-------+
- 7 rows in set (0.00 sec)
(2)SHOW TABLE STATUS语句查看视图的信息,这里说明视图为虚拟表,与普通表是有区别的。
- mysql> SHOW TABLE STATUS LIKE 'v_book'\G
- *************************** 1. row ***************************
- Name: v_book
- Engine: NULL
- Version: NULL
- Row_format: NULL
- Rows: NULL
- Avg_row_length: NULL
- Data_length: NULL
- Max_data_length: NULL
- Index_length: NULL
- Data_free: NULL
- Auto_increment: NULL
- Create_time: NULL
- Update_time: NULL
- Check_time: NULL
- Collation: NULL
- Checksum: NULL
- Create_options: NULL
- Comment: VIEW
- 1 row in set (0.00 sec)
- mysql> SHOW TABLE STATUS LIKE 'tb_bookinfo'\G
- *************************** 1. row ***************************
- Name: tb_bookinfo
- Engine: InnoDB
- Version: 10
- Row_format: Dynamic
- Rows: 3
- Avg_row_length: 5461
- Data_length: 16384
- Max_data_length: 0
- Index_length: 0
- Data_free: 0
- Auto_increment: NULL
- Create_time: 2018-04-17 15:17:13
- Update_time: 2018-04-17 16:51:30
- Check_time: NULL
- Collation: latin1_swedish_ci
- Checksum: NULL
- Create_options:
- Comment:
- 1 row in set (0.00 sec)
(3)SHOW CREATE VIEW语句查看视图的详细定义
- mysql> SHOW CREATE VIEW v_book\G
- *************************** 1. row ***************************
- View: v_book
- Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_book` AS select `b`.`barcode` AS `barcode`,`b`.`bookname` AS `bookname`,`b`.`author` AS `author`,`b`.`price` AS `price`,`b`.`bookcase` AS `bookcase`,`t`.`borrowTime` AS `borrowTime`,`t`.`backTime` AS `backTime` from (`tb_bookinfo` `b` join `tb_borrow` `t`) where (`b`.`typeid` = `t`.`id`)
- character_set_client: gbk
- collation_connection: gbk_chinese_ci
- 1 row in set (0.00 sec)
2.修改视图
修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生变化时,可以通过修改视图来保持视图和基本表之间一致。
(1)CREATE OR REPLACE VIEW语句在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。
- mysql> CREATE OR REPLACE VIEW
- -> v_book(barcode,bookname,borrowTime,backTime)
- -> AS SELECT barcode,bookname,borrowTime,backTime
- -> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id;
- Query OK, 0 rows affected (0.01 sec)
- mysql> DESC v_book;
- +------------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +------------+-------------+------+-----+---------+-------+
- | barcode | varchar(30) | YES | | NULL | |
- | bookname | varchar(70) | YES | | NULL | |
- | borrowTime | date | YES | | NULL | |
- | backTime | date | YES | | NULL | |
- +------------+-------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
(2)ALTER VIEW语句改变了视图的定义,包括被索引视图,但不影响所依赖的存储过程或触发器。
- mysql> ALTER VIEW
- -> v_book(barcode,borrowTime,backTime)
- -> AS SELECT barcode,borrowTime,backTime
- -> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id
- -> WITH CHECK OPTION;
- Query OK, 0 rows affected (0.00 sec)
- mysql> DESC v_book;
- +------------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +------------+-------------+------+-----+---------+-------+
- | barcode | varchar(30) | YES | | NULL | |
- | borrowTime | date | YES | | NULL | |
- | backTime | date | YES | | NULL | |
- +------------+-------------+------+-----+---------+-------+
- 3 rows in set (0.00 sec)
3.更新视图
对视图的更新其实就是对表的更新,更新视图是通过视图来插入、更新和删除表中的数据。因为视图是一个虚拟表,其中没有数据,通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内的数据,超出了范围,就不能更新。
(1)更新视图,同时也把原来的表更新了
- mysql> SELECT * FROM v_book;
- +----------+------------+------------+
- | barcode | borrowTime | backTime |
- +----------+------------+------------+
- | 17120108 | 2018-04-17 | 2018-04-20 |
- | 17120109 | 2018-04-16 | 2018-04-21 |
- +----------+------------+------------+
- 2 rows in set (0.00 sec)
- mysql> UPDATE v_book SET borrowTime='2018-04-19' WHERE barcode='17120108';
- Query OK, 1 row affected (0.00 sec)
- Rows matched: 1 Changed: 1 Warnings: 0
- mysql> SELECT * FROM v_book;
- +----------+------------+------------+
- | barcode | borrowTime | backTime |
- +----------+------------+------------+
- | 17120108 | 2018-04-19 | 2018-04-20 |
- | 17120109 | 2018-04-16 | 2018-04-21 |
- +----------+------------+------------+
- 2 rows in set (0.00 sec)
- mysql> SELECT * FROM tb_borrow;
- +----+----------+--------+------------+------------+----------+--------+
- | id | readerid | bookid | borrowTime | backTime | operator | ifback |
- +----+----------+--------+------------+------------+----------+--------+
- | 1 | 1 | 1 | 2018-04-19 | 2018-04-20 | mr | 1 |
- | 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 0 |
- +----+----------+--------+------------+------------+----------+--------+
- 2 rows in set (0.00 sec)
(2)更新视图的限制
a.视图中包含COUNT()、SUM()、MAX()、MIN()等函数
b.视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVIG等关键字
c.常量视图
d.视图中的SELECT中包含子查询
f.由不可更新的视图导出的视图
g.创建视图时,ALGORITHM为TEMPTABLE类型
h.视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。
4.删除视图
- mysql> DROP VIEW IF EXISTS v_book;
- Query OK, 0 rows affected (0.00 sec)
- mysql> SELECT * FROM v_book;
- ERROR 1146 (42S02): Table 'db_library.v_book' doesn't exist
Mysql数据库(六)视图的更多相关文章
- MySQL数据库之视图
1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...
- Navicat工具导出mySQL数据库某个视图结构的.sql脚本
用Navicat工具怎么都导不出来mySQL数据库的某个视图.sql脚本,即使导出来也只是包含视图记录,不包含视图结构.经过一番研究,终于克服,操作如下: 1.在某个数据库中,新建备份,如下图 2.选 ...
- MySQL数据库创建视图
视图可以说是一种虚拟表,建立在基本表的基础上,通过关联一个表或者多个表来获取多个表中需要的字段,视图只是用来查询数据并不能用来存储数据信息. 我有以下几张表: -------image表---- -- ...
- mysql数据库之视图、触发器
视图 概念:通过查询得到的一张虚拟表,然后保存下来就是视图 视图的好处:如果要频繁使用某张虚拟表,那么就可以保存为视图,以后查找就直接拿这个视图就会非常方便 视图语法规则: create view t ...
- 39、mysql数据库(视图)
39.1.视图: 0.创建表及插入数据: 1.创建teacher表及插入数据: (1)创建表: CREATE TABLE teacher( tid int PRIMARY KEY auto_incre ...
- spring boot使用jpa查询mysql数据库的视图时不报错,但查询结果数据总是重复第一条
问题描述: 在数据库里查询到的结果是正常显示的 在程序中返回的结果: 解决方法: 添加行号作为主键: 解决! 我明明是前端啊前端,为啥在搞后台....,总感觉我要在向全栈进发,希望自己有朝一日真的能成 ...
- MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术
逻辑查询优化包括的技术 1)子查询优化 2)视图重写 3)等价谓词重写 4)条件简化 5)外连接消除 6)嵌套连接消除 7)连接消除 8)语义优化 9)非SPJ优化 一.子查询优化 1. ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
- mysql 数据库视图迁移
最近做一个项目,为了方便查询,建了好多的视图表,正式上线的时候需要把本地数据库迁移到服务器上. 按照常规方法: 1."导出sql","导入sql",发现视图没过 ...
- MYSQL数据库学习十六 安全性机制
16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...
随机推荐
- Python奇技淫巧 - 持续更新中....
Python奇技淫巧 人生苦短,我用Python: 编程界这绝对不是一句空话,尤其是对于使用过多个语言进行工作的同学们来说,用Python的时间越长,越有一种我早干嘛去了的想法,没事,啥时候用Pyth ...
- layui-table 对表格数据进行处理之后的排序问题
使用layui table过程中,将某一列的数据格式进行转换,或者将0/1状态改为是/否,或者将数字改为星星评分显示的时候都会遇到一个问题,我的表格数据转换成其他形式,同时设置了sort:true,此 ...
- .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心
一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...
- eShopOnContainers学习系列(三):RabbitMQ消息总线实践
今天研究了下eShopOnContainers里的RabbitMQ的使用,在项目里是以封装成消息总线的方式使用的,但是仍然是以其发布.订阅两个方法作为基础封装的,我们今天就来实际使用一下. 为了简单起 ...
- Python 正则re匹配中文、英式数字
#coding:utf-8 import re s = u''' 或多或少的好好读书电锯惊魂20202 和水电费后是否会时候1212没收到风10.12海大富的是粉红色的和办法的1244525.000 ...
- IDEA 学习笔记之 安装和基本配置
安装和基本配置: 下载:https://www.jetbrains.com/idea/download/#section=windows 下载Zip安装包: 基础知识: Eclipse的工作区=IDE ...
- 【linux】jdk安装及环境变量配置
登录linux后,切换目录到 /usr/local cd /user/local 在/usr/local目录新建文件夹java用于存放jdk文件 mkdir java 在文件夹java中下载jdk文件 ...
- 执行Django数据迁移,报错 1091
问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也 ...
- redis安装详细
1.cd命令到你的下载文件夹下 2.输入命令下载redis ,可以自己选择下载的路径,redis表示版本号 wget http://download.redis.io/releases/redis ...
- Hyper-V虚拟机win7网络红叉,无法上网解决方法
之前一直都是玩Vmware虚拟机,后来win8之后的系统有Hyper-V虚拟机就开始接触了. Windows 中内置的Hyper-V管理器可以说是给很多人带来了惊喜!至少运行的流畅程度要比Vmware ...