一、视图是由数据库中的一个表或多个表导出的虚拟表。其作用是方便用户对数据的操作。

  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数据库(六)视图的更多相关文章

  1. MySQL数据库之视图

    1 引言 为了简化复杂SQL语句编写,以及提高数据库安全性,MySQL数据库视图特性.视图是一张虚拟表,不在数据库中以储存的数据值形式存在.在开发中,开发者往往只对某些特定数据和所负责的特定任务感兴趣 ...

  2. Navicat工具导出mySQL数据库某个视图结构的.sql脚本

    用Navicat工具怎么都导不出来mySQL数据库的某个视图.sql脚本,即使导出来也只是包含视图记录,不包含视图结构.经过一番研究,终于克服,操作如下: 1.在某个数据库中,新建备份,如下图 2.选 ...

  3. MySQL数据库创建视图

    视图可以说是一种虚拟表,建立在基本表的基础上,通过关联一个表或者多个表来获取多个表中需要的字段,视图只是用来查询数据并不能用来存储数据信息. 我有以下几张表: -------image表---- -- ...

  4. mysql数据库之视图、触发器

    视图 概念:通过查询得到的一张虚拟表,然后保存下来就是视图 视图的好处:如果要频繁使用某张虚拟表,那么就可以保存为视图,以后查找就直接拿这个视图就会非常方便 视图语法规则: create view t ...

  5. 39、mysql数据库(视图)

    39.1.视图: 0.创建表及插入数据: 1.创建teacher表及插入数据: (1)创建表: CREATE TABLE teacher( tid int PRIMARY KEY auto_incre ...

  6. spring boot使用jpa查询mysql数据库的视图时不报错,但查询结果数据总是重复第一条

    问题描述: 在数据库里查询到的结果是正常显示的 在程序中返回的结果: 解决方法: 添加行号作为主键: 解决! 我明明是前端啊前端,为啥在搞后台....,总感觉我要在向全栈进发,希望自己有朝一日真的能成 ...

  7. MySql学习(六) —— 数据库优化理论(二) —— 查询优化技术

    逻辑查询优化包括的技术 1)子查询优化  2)视图重写  3)等价谓词重写  4)条件简化  5)外连接消除  6)嵌套连接消除  7)连接消除  8)语义优化 9)非SPJ优化 一.子查询优化 1. ...

  8. mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份

    目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...

  9. mysql 数据库视图迁移

    最近做一个项目,为了方便查询,建了好多的视图表,正式上线的时候需要把本地数据库迁移到服务器上. 按照常规方法: 1."导出sql","导入sql",发现视图没过 ...

  10. MYSQL数据库学习十六 安全性机制

    16.1 MYSQL数据库所提供的权限 16.1.1 系统表 mysql.user 1. 用户字段 Host:主机名: User:用户名: Password:密码. 2. 权限字段 以“_priv”字 ...

随机推荐

  1. java8 两个时间比较

    比如在15:30:30之前: LocalTime.now().isBefore(LocalTime.of(15, 30,30)) 或15:30:30之后 LocalTime.now().isAfter ...

  2. 编写shell脚本实现一键创建KVM虚拟机

    shell脚本一键创建虚拟机 代码如下: #!/bin/bashname=$1 #把位置变量$1重新定义为name(创建虚拟机的名字)path1=/var/lib/libvirt/images/ #i ...

  3. redis实践 —— redisReply简析

    redisReply 定义如下: /* This is the reply object returned by redisCommand() */ typedef struct redisReply ...

  4. Event Hub小白入门指南

    Event Hub事件中心 本文的目的在于用最白的大白话,让你从“完全不懂”开始,理解什么是分布式大数据流平台Event Hub,并且理解它的关键概念,并且初步理解其收发数据API. 定义,Event ...

  5. yii中缓存(cache)详解 - 彼岸あ年華ツ

    缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成 这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 内部方法 一.缓存配置: ...

  6. Docker 第一个HelloWorld镜像

    Docker 创建第一个HelloWorld镜像: 创建Dockerfile FROM alpine CMD "echo" "Hello World!" 通过D ...

  7. 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题

    Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...

  8. 安装、卸载 cocoapods

    卸载cocoapods: localhost:~ je$ sudo gem uninstall cocoapods Remove executables: pod, sandbox-pod in ad ...

  9. C#学习--SQL server数据库基本操作(连接、增、删、改、查)封装

    写在前面: 在日常的工作中,通常一个项目会大量用的数据库的各种基本操作,因此小编几个常见的数据库的操作封装成了一个dll方便后续的开发使用.SQLserver数据库是最为常见的一种数据库,本文则主要是 ...

  10. SQL 存储过程示例讲解

    create proc score_result ) --参数 as declare --定义变量@courseNo int, @testTime1 datetime, @avg int begin ...