视图

一、视图的概述

1. 含义:是从数据库中一个或多个表中导出的虚拟表
2. 作用:①简单化 ②安全性 ③逻辑数据独立性
3. 注意:一个表可以由多个视图;

二、视图的创建

1. 总的语法形式

  1. CREATE
  2. [OR REPLACE]
  3. [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
  4. VIEW view_name [(column_list)]
  5. AS select_statement
  6. [WITH [CASCADED | LOCAL] CHECK OPTION]
 
介绍
  • REPLACE:表示替换已经创建的视图
  • ALGORITHM:表示视图选择的算法
  • view_name :视图名
  • column_list:属性列表
  • select_statement:select语句
  • WITH [CASCADED | LOCAL] CHECK OPTION:表示视图在更新时保证在视图的权限范围内
  • CASCADED:默认值,表示更新视图时要满足所有相关的视图和表的条件
  • LOCAL:表示更新视图时满足该视图本身定义的条件即可。
  • UNDEFINED:表示MySQL自动选择算法
  • MERGE:表示将使用视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分 TEMPTABLE:表示将视图的结果存入临时表,然后用临时表来执行语句

2. 在单表上创建视图

语法:

  1. CREATE VIEW 视图名 [(视图字段,……,字段n)] AS select 表字段名,……,表字段名n from 数据表;
  2. CREATE or replace VIEW 视图名 [(视图字段,……,字段n)] AS select 表字段名,……,表字段名n from 数据表;
  3. 语句2,如果视图没有创建,则创建;如果视图已创建,则修改视图。

实例:

  1. 【例】
  2. mysql>create view view_e(a,b,c,d,e,g,h) as select gkbh,yhm,mm,xm,xb,csrq,sfzh from guke;
  3. 【附,显示】
  4. select * from view_e;
  5. +-------+----------+----------+------+------+------------+--------------------+
  6. | a | b | c | d | e | g | h |
  7. +-------+----------+----------+------+------+------------+--------------------+
  8. | 00001 | aaaaaaaa | 12345678 | 李明 | | 1990-05-06 | 111111111111111111 |
  9. | 00002 | bbbbbbbb | 12345678 | 李逵 | | 1988-05-06 | 111111111111111111 |
  10. | 00003 | cccccccc | 12345678 | 西施 | | 1990-05-06 | 111111111111111111 |
  11. +-------+----------+----------+------+------+------------+--------------------+

(2) 注意:默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

3. 在多表上创建视图

语法:

  1. CREATE VIEW 视图名 [(视图字段,……,字段n)]
  2. AS A表表名.表字段名,……,A表表名.表字段名n
  3. B表表名.表字段名,……,B表表名.表字段名
  4. from 数据A表,数据B
  5. where 连接条件;

实例:

  1. 【例】
  2. mysql> create view view_a(订单编号,商品编号,顾客编号,订单日期)
  3. as select dingdanxiangqing.ddbh,dingdanxiangqing.spbh,
  4. dingdan.gkbh,dingdan.ddrq
  5. from dingdan,dingdanxiangqing
  6. where dingdanxiangqing.ddbh=dingdan.ddbh;
  7. 【附,效果】
  8. mysql> select * from view_a;
  9. +----------+----------+----------+---------------------+
  10. | 订单编号 | 商品编号 | 顾客编号 | 订单日期 |
  11. +----------+----------+----------+---------------------+
  12. | 1 | 00000001 | 00001 | 2016-01-01 00:00:00 |
  13. | 2 | 00000003 | 00003 | 2016-02-10 00:00:00 |
  14. | 1 | 00000004 | 00001 | 2016-01-01 00:00:00 |
  15. +----------+----------+----------+---------------------+

三、视图的查看

语法:

  1. desc 视图表

实例:

  1. 【例】
  2. mysql> desc view_a;
  3. +----------+----------+------+-----+---------+-------+
  4. | Field | Type | Null | Key | Default | Extra |
  5. +----------+----------+------+-----+---------+-------+
  6. | 订单编号 | int(11) | NO | | 0 | |
  7. | 商品编号 | char(8) | NO | | | |
  8. | 顾客编号 | char(5) | NO | | NULL | |
  9. | 订单日期 | datetime | NO | | NULL | |
  10. +----------+----------+------+-----+---------+-------+

作用:显示视图的字段定义、字段的数据类型、是否为空、是否是主键\外键、默认值和额外信息

语法

  1. show table status like'视图表名’\G;

实例

  1. mysql> show table status like'view_a';
  2. +--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+
  3. | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length |
  4. +--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+
  5. | view_a | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
  6. +--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+
  7. -----------+----------------+-------------+-------------+------------+-----------+----------+----------------+
  8. Data_free |Auto_increment | Create_time | Update_time | Check_time | Collation |Checksum | Create_options |
  9. -----------+----------------+-------------+-------------+------------+-----------+----------+----------------+
  10. NULL | NULL |NULL | NULL | NULL | NULL | NULL | NULL |
  11. -----------+----------------+-------------+-------------+------------+-----------+----------+----------------+
  12. ---------+
  13. Comment |
  14. ---------+
  15. VIEW |
  16. ---------+
  17.  
  18. 或者mysql>show table status like'view_a'\G;
  19.  
  20. *************************** 1. row ***************************
  21. Name: view_a
  22. Engine: NULL
  23. Version: NULL
  24. Row_format: NULL
  25. Rows: NULL
  26. Avg_row_length: NULL
  27. Data_length: NULL
  28. Max_data_length: NULL
  29. Index_length: NULL
  30. Data_free: NULL
  31. Auto_increment: NULL
  32. Create_time: NULL
  33. Update_time: NULL
  34. Check_time: NULL
  35. Collation: NULL
  36. Checksum: NULL
  37. Create_options: NULL
  38. Comment: VIEW

作用:显示视图的存储引擎,创建时间

语法

  1. show create view 视图名

实例

  1. 【例】
  2. mysql> show create view view_a\G;
  3. *************************** 1. row ***************************
  4. View: view_a
  5. Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `view_a` AS select `dingdanxiangqing`.`ddbh` AS `订单编号`,`dingdanxiangqing`.`spbh` AS `商品编号`,`dingdan`.`gkbh` AS `顾客编号`,`dingdan`.`ddrq` AS `订单日期` from (`dingdan` join `dingdanxiangqing`) where (`dingdanxiangqing`.`ddbh` = `dingdan`.`ddbh`)
  6. character_set_client: gbk
  7. collation_connection: gbk_chinese_ci

作用:显示视图的名称和创建语句

语法

  1. select * from information_schema.views\G;

实例

  1. mysql> select * from information_schema.views\G;
  2. *************************** 1. row ***************************
  3. TABLE_CATALOG: def
  4. TABLE_SCHEMA: webshop
  5. TABLE_NAME: view_a
  6. VIEW_DEFINITION: select `webshop`.`dingdanxiangqing`.`ddbh` AS `订单编号`,`webshop`.`dingdanxiangqing`.`spbh` AS `商品编号`,`webshop`.`dingdan`.`gkbh` AS `顾客编号`,`webshop`.`dingdan`.`ddrq` AS `订单日期` from `webshop`.`dingdan` join `webshop`.`dingdanxiangqing` where (`webshop`.`dingdanxiangqing`.`ddbh` = `webshop`.`dingdan`.`ddbh`)
  7. CHECK_OPTION: NONE
  8. IS_UPDATABLE: YES
  9. DEFINER: root@localhost
  10. SECURITY_TYPE: DEFINER
  11. CHARACTER_SET_CLIENT: gbk
  12. COLLATION_CONNECTION: gbk_chinese_ci
  13. 作用:显示所有的数据表

四、视图的修改

①CREATE语句
总的语法

  1. CREATE
  2. [OR REPLACE]
  3. [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
  4. VIEW view_name [(column_list)]
  5. AS select_statement
  6. [WITH [CASCADED | LOCAL] CHECK OPTION]

简化版

  1. CREATE or replace view 视图名 as select 表字段 from 表名

注意:该语法与创建语法完全一样,当视图不存在时,此语法是创建视图;视图存在时,此语法是修改视图;

②ALTER语法
总的语法:

  1. ALTER
  2. [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
  3. [DEFINER = { user | CURRENT_USER }]
  4. [SQL SECURITY { DEFINER | INVOKER }]
  5. VIEW view_name [(column_list)]
  6. AS select_statement
  7. [WITH [CASCADED | LOCAL] CHECK OPTION]

简化版:

  1. ALTER view 视图名 as select 表字段 from 表名

五、视图的更新

注意:
①因为视图是虚拟表所以,所以对视图的操作,实际上是对基本表的操作;
②对其中的一个视图更新后,其基本表也更新了,从而与这个基本表相关的视图表的内容也更新。
③不可以更新的视图
1.包含以下关键字的sql语句:聚合函数(sum、min、max、count)、distinct、group by 、having、union 或者uinon all
2.常量视图
3.select 中包含子查询
4.join
5.from一个不可更新的试图
6.where字句的子查询引用了from字句中的表
(1)更新视图
 语法:

  1. update 视图名 set 更新数据;
  1. 实例:
  1. 原数据表:
  2. mysql> select * from guke;
  3. +-------+------+------------+
  4. | gkbh | xm | csrq |
  5. +-------+------+------------+
  6. | 00001 | 李明 | 1990-05-06 |
  7. | 00002 | 李逵 | 1988-05-06 |
  8. | 00003 | 西施 | 1990-05-06 |
  9. +-------+------+------------+
  10. 原视图:
  11. mysql> select * from view_c;
  12. +----------+------+------------+
  13. | 顾客编号 | 姓名 | 出生日期 |
  14. +----------+------+------------+
  15. | 00001 | 李明 | 1990-05-06 |
  16. | 00002 | 李逵 | 1988-05-06 |
  17. | 00003 | 西施 | 1990-05-06 |
  18. +----------+------+------------+
  19. 改后:
  20. 视图:
  21. mysql> update view_c set 姓名='哈哈在笑' where 顾客编号='00002';
  22. mysql> select * from view_c;
  23. +----------+----------+------------+
  24. | 顾客编号 | 姓名 | 出生日期 |
  25. +----------+----------+------------+
  26. | 00001 | 哈哈一笑 | 1990-05-06 |
  27. | 00002 | 哈哈在笑 | 1988-05-06 |
  28. | 00003 | 哈哈一笑 | 1990-05-06 |
  29. +----------+----------+------------+
  30. 基本表:
  31. mysql> select gkbh,xm,csrq from guke;
  32. +-------+----------+------------+
  33. | gkbh | xm | csrq |
  34. +-------+----------+------------+
  35. | 00001 | 哈哈一笑 | 1990-05-06 |
  36. | 00002 | 哈哈在笑 | 1988-05-06 |
  37. | 00003 | 哈哈一笑 | 1990-05-06 |
  38. +-------+----------+------------+

注意:基本表已经改变
(2)插入记录
 语法:

  1. insert into 数据表名 values(插入的数据,……,插入的数据n);

六、视图的删除

1. 总的语法

  1. DROP VIEW [IF EXISTS]
  2. view_name [, view_name] ...
  3. [RESTRICT | CASCADE]
  1.  

MySQL:视图的更多相关文章

  1. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...

  2. Mysql视图的作用及其性能分析

    定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...

  3. MYSQL视图的学习笔记

    MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...

  4. 深入解析MySQL视图view

    阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...

  5. MySQL视图view/存储过程和函数的使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  6. MySQL视图更新

    昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...

  7. 一个MySQL视图的优化过程

    1.需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程.问题就是下面这个家伙: create o ...

  8. mysql视图和临时表的区别

    视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...

  9. MySQL视图(view)

    一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...

  10. 11.Mysql视图

    11.视图11.1 什么是视图 视图view是一张虚拟表,它不存储数据,数据仍在表里,视图由一条查询表的select语句创建,视图只存储select语句. 可以将复杂的查询语句封装成视图,用户可以从视 ...

随机推荐

  1. vue-cli 2.92版本 没有dev.server.js

    在webpack.dev.conf.js 文件中 //首先 const express = require('express') const app = express() var appData = ...

  2. MongoDB集群单mongos的问题总结

    问题发现 在使用过程中,通过spark访问集群的效率不是很令人满意,80核心同时运行的速度比单核心也就快了20倍左右,预测瓶颈在mongodb读写上.当然,此时没遇到其他问题暂时没进行问题梳理. 在数 ...

  3. 怎么让table中的<td>内容向上对齐

    <td valign="top"></td>

  4. 《CSS世界》读书笔记(五) --height:100%

    <!-- <CSS世界> 张鑫旭著 --> 相对简单而单纯的height:auto height:auto比width:auto简单的多,原因在于: CSS默认流是水平方向的, ...

  5. URL与视图

    path函数 path函数的定义为:path(route,view,name=None,kwargs=None).以下对这几个参数进行讲解. route 参数 url的匹配规则.这个参数中可以指定ur ...

  6. Eclipse创建Maven Web项目后更改Servlet版本

    Eclipse创建Maven Web项目后更改Servlet版本 1.场景基于Eclipse通过maven-archetype-webapp原型创建一个Web项目后,其默认Servlet版本是2.3, ...

  7. opencv计算两个轮廓之间hu矩相似程度,MatchShapes

    https://blog.csdn.net/jiake_yang/article/details/52589063 [OpenCV3.3]通过透视变换矫正变形图像 https://blog.csdn. ...

  8. 安装Joomla!3

    在日常测试中搭建一个web 站点进行进行linux 相关功能测试,只是不喜欢httpd 或者nginx 的默认界面: 安装Joomla!3: 系统:centos 7 软件:  连接: https:// ...

  9. [c/c++] programming之路(21)、字符串(二)

    一.for /l %i in (1,1,5) do calc 等命令行参数 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #inclu ...

  10. Python3 tkinter基础 OptionMenu 点击按钮,出现单选的下拉列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...