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”字 ...
随机推荐
- Spring Boot 梳理 - 4个核心
Spring Boot 魔法的核心:自动配置.起步依赖.命令行界面.Actuator 自动配置: 不用手动配置JdbcTemplate的Bean 不用手动配置DataSource的Bean Sprin ...
- 如何免费使用GPU跑深度学习代码
从事深度学习的研究者都知道,深度学习代码需要设计海量的数据,需要很大很大很大(重要的事情说三遍)的计算量,以至于CPU算不过来,需要通过GPU帮忙,但这必不意味着CPU的性能没GPU强,CPU是那种综 ...
- __pycache__
最近在使用python写一个串口模块的时候,偶然发现运行脚本之后,在工程文件夹下面出现了这样一个文件夹__pycache__,所以就特意到网上查了一下这个文件夹是怎么回事. 我们先在源文件中添加一些内 ...
- [UWP] 自定义一个ItemsPanel
在做游民星空的搜索页面的时候,需要展示搜索热点词,返回的是一个string数组的形式,然后以一种错落的方式显示,每一个Item的大小都和热点词长度一致,然后一行放不下之后就换行,描述的不太直观,直接看 ...
- MongoDB 学习笔记之 TTL索引,部分索引和文本索引
TTL索引: TTL集合支持mongodb对存储的数据进行失效时间设置,经过指定的时间段后.或在指定的时间点过期,集合自动被mongod清除.这一特性有利于对一些只需要保存一定时间的数据信息进行存储, ...
- Java通过JDK动态代理简单的实现一个AOP
首先说一下,因为自己还没有去研读spring的AOP的源码,只是大致知道其功能,便想着自己先手动实现一个先看看,觉得这样以后研读源码的时候会收获更多! 实现:做一个在添加注解的方法执行之前,可以先执行 ...
- C# 读取控制台的Console.Write
一个程序去调用另一个xxx.exe的时候,需要记录下这个exe里面的console.write的输出 public static string InvokeExcute(string Command) ...
- HashMap 取数算法
Map,百度翻译给我的解释是映射,在Java编程中,它是存储键值对(key-value)的一种容器,也是Java程序员常用的对象.这篇博客介绍下HashMap的实现:java是面向对象编程语言,jdk ...
- Ubuntu16.04安装Docker、nvidia-docker
Ubuntu16.04安装Docker.nvidia-docker Docker安装 1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选) sudo cp /etc/apt/sources.l ...
- 小白学 Python(4):变量基础操作
人生苦短,我选Python 引言 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 前面的文章中,我们介绍了 ...