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

  1.视图的概念

  2.视图的作用

  二、创建视图

  创建视图是指在已经存在的数据表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。

  1.查看创建视图的权限

  1. mysql> SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user='root';
  2. +-------------+------------------+
  3. | Select_priv | Create_view_priv |
  4. +-------------+------------------+
  5. | Y | Y |
  6. +-------------+------------------+
  7. 1 row in set (0.01 sec)

  结果中两列的值都为Y,这表明root用户具有Select(查看)和Create_view(创建视图)的权限。

  2.创建视图

  1. mysql> SELECT * FROM tb_bookinfo;
  2. +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
  3. | barcode | bookname | typeid | author | ISBN | price | page | bookcase | inTime | del | id |
  4. +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
  5. | 17120107 | Java King | 3 | LianJiang | 115 | 49.80 | 350 | 1 | 2018-04-17 | 0 | 1 |
  6. | 17120108 | Lian | 1 | QiaoJiang | 116 | 50.00 | 351 | 2 | 2018-04-18 | 0 | 2 |
  7. | 17120109 | Tian King | 2 | TianJiang | 117 | 51.10 | 352 | 3 | 2018-04-19 | 0 | 3 |
  8. +----------+-----------+--------+-----------+------+-------+------+----------+------------+------+----+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tb_borrow;
  12. +----+----------+--------+------------+------------+----------+--------+
  13. | id | readerid | bookid | borrowTime | backTime | operator | ifback |
  14. +----+----------+--------+------------+------------+----------+--------+
  15. | 1 | 1 | 1 | 2018-04-17 | 2018-04-20 | mr | 1 |
  16. | 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 0 |
  17. +----+----------+--------+------------+------------+----------+--------+
  18. 2 rows in set (0.00 sec)
  19.  
  20. mysql> CREATE VIEW
  21. -> v_book(barcode,bookname,author,price,bookcase,borrowTime,backTime)
  22. -> AS SELECT barcode,bookname,author,price,bookcase,borrowTime,backTime
  23. -> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id;
  24. Query OK, 0 rows affected (0.53 sec)
  25.  
  26. mysql> SELECT * FROM v_book;
  27. +----------+-----------+-----------+-------+----------+------------+------------+
  28. | barcode | bookname | author | price | bookcase | borrowTime | backTime |
  29. +----------+-----------+-----------+-------+----------+------------+------------+
  30. | 17120108 | Lian | QiaoJiang | 50.00 | 2 | 2018-04-17 | 2018-04-20 |
  31. | 17120109 | Tian King | TianJiang | 51.10 | 3 | 2018-04-16 | 2018-04-21 |
  32. +----------+-----------+-----------+-------+----------+------------+------------+
  33. 2 rows in set (0.00 sec)

  3.创建视图的注意事项

  三、视图操作

  1.查看视图

  (1)DESCRIBE语句

  1. mysql> DESC v_book;
  2. +------------+------------------+------+-----+---------+-------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +------------+------------------+------+-----+---------+-------+
  5. | barcode | varchar(30) | YES | | NULL | |
  6. | bookname | varchar(70) | YES | | NULL | |
  7. | author | varchar(30) | YES | | NULL | |
  8. | price | float(8,2) | YES | | NULL | |
  9. | bookcase | int(10) unsigned | YES | | NULL | |
  10. | borrowTime | date | YES | | NULL | |
  11. | backTime | date | YES | | NULL | |
  12. +------------+------------------+------+-----+---------+-------+
  13. 7 rows in set (0.00 sec)

  (2)SHOW TABLE STATUS语句查看视图的信息,这里说明视图为虚拟表,与普通表是有区别的。

  1. mysql> SHOW TABLE STATUS LIKE 'v_book'\G
  2. *************************** 1. row ***************************
  3. Name: v_book
  4. Engine: NULL
  5. Version: NULL
  6. Row_format: NULL
  7. Rows: NULL
  8. Avg_row_length: NULL
  9. Data_length: NULL
  10. Max_data_length: NULL
  11. Index_length: NULL
  12. Data_free: NULL
  13. Auto_increment: NULL
  14. Create_time: NULL
  15. Update_time: NULL
  16. Check_time: NULL
  17. Collation: NULL
  18. Checksum: NULL
  19. Create_options: NULL
  20. Comment: VIEW
  21. 1 row in set (0.00 sec)
  22.  
  23. mysql> SHOW TABLE STATUS LIKE 'tb_bookinfo'\G
  24. *************************** 1. row ***************************
  25. Name: tb_bookinfo
  26. Engine: InnoDB
  27. Version: 10
  28. Row_format: Dynamic
  29. Rows: 3
  30. Avg_row_length: 5461
  31. Data_length: 16384
  32. Max_data_length: 0
  33. Index_length: 0
  34. Data_free: 0
  35. Auto_increment: NULL
  36. Create_time: 2018-04-17 15:17:13
  37. Update_time: 2018-04-17 16:51:30
  38. Check_time: NULL
  39. Collation: latin1_swedish_ci
  40. Checksum: NULL
  41. Create_options:
  42. Comment:
  43. 1 row in set (0.00 sec)

  (3)SHOW CREATE VIEW语句查看视图的详细定义

  1. mysql> SHOW CREATE VIEW v_book\G
  2. *************************** 1. row ***************************
  3. View: v_book
  4. 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`)
  5. character_set_client: gbk
  6. collation_connection: gbk_chinese_ci
  7. 1 row in set (0.00 sec)

  2.修改视图

  修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生变化时,可以通过修改视图来保持视图和基本表之间一致。

  (1)CREATE OR REPLACE VIEW语句在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。

  1. mysql> CREATE OR REPLACE VIEW
  2. -> v_book(barcode,bookname,borrowTime,backTime)
  3. -> AS SELECT barcode,bookname,borrowTime,backTime
  4. -> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id;
  5. Query OK, 0 rows affected (0.01 sec)
  6.  
  7. mysql> DESC v_book;
  8. +------------+-------------+------+-----+---------+-------+
  9. | Field | Type | Null | Key | Default | Extra |
  10. +------------+-------------+------+-----+---------+-------+
  11. | barcode | varchar(30) | YES | | NULL | |
  12. | bookname | varchar(70) | YES | | NULL | |
  13. | borrowTime | date | YES | | NULL | |
  14. | backTime | date | YES | | NULL | |
  15. +------------+-------------+------+-----+---------+-------+
  16. 4 rows in set (0.00 sec)

  (2)ALTER VIEW语句改变了视图的定义,包括被索引视图,但不影响所依赖的存储过程或触发器。

  1. mysql> ALTER VIEW
  2. -> v_book(barcode,borrowTime,backTime)
  3. -> AS SELECT barcode,borrowTime,backTime
  4. -> FROM tb_bookinfo AS b,tb_borrow AS t WHERE b.typeid=t.id
  5. -> WITH CHECK OPTION;
  6. Query OK, 0 rows affected (0.00 sec)
  7.  
  8. mysql> DESC v_book;
  9. +------------+-------------+------+-----+---------+-------+
  10. | Field | Type | Null | Key | Default | Extra |
  11. +------------+-------------+------+-----+---------+-------+
  12. | barcode | varchar(30) | YES | | NULL | |
  13. | borrowTime | date | YES | | NULL | |
  14. | backTime | date | YES | | NULL | |
  15. +------------+-------------+------+-----+---------+-------+
  16. 3 rows in set (0.00 sec)

  3.更新视图

  对视图的更新其实就是对表的更新,更新视图是通过视图来插入、更新和删除表中的数据。因为视图是一个虚拟表,其中没有数据,通过视图更新时,都是转换到基本表来更新。更新视图时,只能更新权限范围内的数据,超出了范围,就不能更新。

  (1)更新视图,同时也把原来的表更新了

  1. mysql> SELECT * FROM v_book;
  2. +----------+------------+------------+
  3. | barcode | borrowTime | backTime |
  4. +----------+------------+------------+
  5. | 17120108 | 2018-04-17 | 2018-04-20 |
  6. | 17120109 | 2018-04-16 | 2018-04-21 |
  7. +----------+------------+------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> UPDATE v_book SET borrowTime='2018-04-19' WHERE barcode='17120108';
  11. Query OK, 1 row affected (0.00 sec)
  12. Rows matched: 1 Changed: 1 Warnings: 0
  13.  
  14. mysql> SELECT * FROM v_book;
  15. +----------+------------+------------+
  16. | barcode | borrowTime | backTime |
  17. +----------+------------+------------+
  18. | 17120108 | 2018-04-19 | 2018-04-20 |
  19. | 17120109 | 2018-04-16 | 2018-04-21 |
  20. +----------+------------+------------+
  21. 2 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT * FROM tb_borrow;
  24. +----+----------+--------+------------+------------+----------+--------+
  25. | id | readerid | bookid | borrowTime | backTime | operator | ifback |
  26. +----+----------+--------+------------+------------+----------+--------+
  27. | 1 | 1 | 1 | 2018-04-19 | 2018-04-20 | mr | 1 |
  28. | 2 | 1 | 2 | 2018-04-16 | 2018-04-21 | mr | 0 |
  29. +----+----------+--------+------------+------------+----------+--------+
  30. 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.删除视图

  1. mysql> DROP VIEW IF EXISTS v_book;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT * FROM v_book;
  5. 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. Python奇技淫巧 - 持续更新中....

    Python奇技淫巧 人生苦短,我用Python: 编程界这绝对不是一句空话,尤其是对于使用过多个语言进行工作的同学们来说,用Python的时间越长,越有一种我早干嘛去了的想法,没事,啥时候用Pyth ...

  2. layui-table 对表格数据进行处理之后的排序问题

    使用layui table过程中,将某一列的数据格式进行转换,或者将0/1状态改为是/否,或者将数字改为星星评分显示的时候都会遇到一个问题,我的表格数据转换成其他形式,同时设置了sort:true,此 ...

  3. .Net Core 商城微服务项目系列(十四):分布式部署携程Apollo构建配置中心

    一.开场白 在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取.但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.conf ...

  4. eShopOnContainers学习系列(三):RabbitMQ消息总线实践

    今天研究了下eShopOnContainers里的RabbitMQ的使用,在项目里是以封装成消息总线的方式使用的,但是仍然是以其发布.订阅两个方法作为基础封装的,我们今天就来实际使用一下. 为了简单起 ...

  5. Python 正则re匹配中文、英式数字

    #coding:utf-8 import re s = u''' 或多或少的好好读书电锯惊魂20202 和水电费后是否会时候1212没收到风10.12海大富的是粉红色的和办法的1244525.000 ...

  6. IDEA 学习笔记之 安装和基本配置

    安装和基本配置: 下载:https://www.jetbrains.com/idea/download/#section=windows 下载Zip安装包: 基础知识: Eclipse的工作区=IDE ...

  7. 【linux】jdk安装及环境变量配置

    登录linux后,切换目录到 /usr/local cd /user/local 在/usr/local目录新建文件夹java用于存放jdk文件 mkdir java 在文件夹java中下载jdk文件 ...

  8. 执行Django数据迁移,报错 1091

    问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也 ...

  9. redis安装详细

      1.cd命令到你的下载文件夹下 2.输入命令下载redis ,可以自己选择下载的路径,redis表示版本号 wget http://download.redis.io/releases/redis ...

  10. Hyper-V虚拟机win7网络红叉,无法上网解决方法

    之前一直都是玩Vmware虚拟机,后来win8之后的系统有Hyper-V虚拟机就开始接触了. Windows 中内置的Hyper-V管理器可以说是给很多人带来了惊喜!至少运行的流畅程度要比Vmware ...