MySQL:视图
视图
一、视图的概述
1. 含义:是从数据库中一个或多个表中导出的虚拟表
2. 作用:①简单化 ②安全性 ③逻辑数据独立性
3. 注意:一个表可以由多个视图;
二、视图的创建
1. 总的语法形式
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[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. 在单表上创建视图
语法:
CREATE VIEW 视图名 [(视图字段,……,字段n)] AS select 表字段名,……,表字段名n from 数据表;
CREATE or replace VIEW 视图名 [(视图字段,……,字段n)] AS select 表字段名,……,表字段名n from 数据表;
语句2,如果视图没有创建,则创建;如果视图已创建,则修改视图。
实例:
【例】
mysql>create view view_e(a,b,c,d,e,g,h) as select gkbh,yhm,mm,xm,xb,csrq,sfzh from guke;
【附,显示】
select * from view_e;
+-------+----------+----------+------+------+------------+--------------------+
| a | b | c | d | e | g | h |
+-------+----------+----------+------+------+------------+--------------------+
| 00001 | aaaaaaaa | 12345678 | 李明 | 男 | 1990-05-06 | 111111111111111111 |
| 00002 | bbbbbbbb | 12345678 | 李逵 | 男 | 1988-05-06 | 111111111111111111 |
| 00003 | cccccccc | 12345678 | 西施 | 女 | 1990-05-06 | 111111111111111111 |
+-------+----------+----------+------+------+------------+--------------------+
(2) 注意:默认情况下创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。
3. 在多表上创建视图
语法:
CREATE VIEW 视图名 [(视图字段,……,字段n)]
AS A表表名.表字段名,……,A表表名.表字段名n,
B表表名.表字段名,……,B表表名.表字段名
from 数据A表,数据B表
where 连接条件;
实例:
【例】
mysql> create view view_a(订单编号,商品编号,顾客编号,订单日期)
as select dingdanxiangqing.ddbh,dingdanxiangqing.spbh,
dingdan.gkbh,dingdan.ddrq
from dingdan,dingdanxiangqing
where dingdanxiangqing.ddbh=dingdan.ddbh;
【附,效果】
mysql> select * from view_a;
+----------+----------+----------+---------------------+
| 订单编号 | 商品编号 | 顾客编号 | 订单日期 |
+----------+----------+----------+---------------------+
| 1 | 00000001 | 00001 | 2016-01-01 00:00:00 |
| 2 | 00000003 | 00003 | 2016-02-10 00:00:00 |
| 1 | 00000004 | 00001 | 2016-01-01 00:00:00 |
+----------+----------+----------+---------------------+
三、视图的查看
语法:
desc 视图表
实例:
【例】
mysql> desc view_a;
+----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| 订单编号 | int(11) | NO | | 0 | |
| 商品编号 | char(8) | NO | | | |
| 顾客编号 | char(5) | NO | | NULL | |
| 订单日期 | datetime | NO | | NULL | |
+----------+----------+------+-----+---------+-------+
作用:显示视图的字段定义、字段的数据类型、是否为空、是否是主键\外键、默认值和额外信息
语法
show table status like'视图表名’\G;
实例
mysql> show table status like'view_a';
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+
| view_a | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+
-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+
Data_free |Auto_increment | Create_time | Update_time | Check_time | Collation |Checksum | Create_options |
-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+
NULL | NULL |NULL | NULL | NULL | NULL | NULL | NULL |
-----------+----------------+-------------+-------------+------------+-----------+----------+----------------+
---------+
Comment |
---------+
VIEW |
---------+ 或者mysql>show table status like'view_a'\G; *************************** 1. row ***************************
Name: view_a
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
作用:显示视图的存储引擎,创建时间
语法
show create view 视图名
实例
【例】
mysql> show create view view_a\G;
*************************** 1. row ***************************
View: view_a
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`)
character_set_client: gbk
collation_connection: gbk_chinese_ci
作用:显示视图的名称和创建语句
语法
select * from information_schema.views\G;
实例
mysql> select * from information_schema.views\G;
*************************** 1. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: webshop
TABLE_NAME: view_a
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`)
CHECK_OPTION: NONE
IS_UPDATABLE: YES
DEFINER: root@localhost
SECURITY_TYPE: DEFINER
CHARACTER_SET_CLIENT: gbk
COLLATION_CONNECTION: gbk_chinese_ci
作用:显示所有的数据表
四、视图的修改
①CREATE语句
总的语法
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
简化版
CREATE or replace view 视图名 as select 表字段 from 表名
注意:该语法与创建语法完全一样,当视图不存在时,此语法是创建视图;视图存在时,此语法是修改视图;
②ALTER语法
总的语法:
ALTER
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
简化版:
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)更新视图
语法:
update 视图名 set 更新数据;
实例:
原数据表:
mysql> select * from guke;
+-------+------+------------+
| gkbh | xm | csrq |
+-------+------+------------+
| 00001 | 李明 | 1990-05-06 |
| 00002 | 李逵 | 1988-05-06 |
| 00003 | 西施 | 1990-05-06 |
+-------+------+------------+
原视图:
mysql> select * from view_c;
+----------+------+------------+
| 顾客编号 | 姓名 | 出生日期 |
+----------+------+------------+
| 00001 | 李明 | 1990-05-06 |
| 00002 | 李逵 | 1988-05-06 |
| 00003 | 西施 | 1990-05-06 |
+----------+------+------------+
改后:
视图:
mysql> update view_c set 姓名='哈哈在笑' where 顾客编号='00002';
mysql> select * from view_c;
+----------+----------+------------+
| 顾客编号 | 姓名 | 出生日期 |
+----------+----------+------------+
| 00001 | 哈哈一笑 | 1990-05-06 |
| 00002 | 哈哈在笑 | 1988-05-06 |
| 00003 | 哈哈一笑 | 1990-05-06 |
+----------+----------+------------+
基本表:
mysql> select gkbh,xm,csrq from guke;
+-------+----------+------------+
| gkbh | xm | csrq |
+-------+----------+------------+
| 00001 | 哈哈一笑 | 1990-05-06 |
| 00002 | 哈哈在笑 | 1988-05-06 |
| 00003 | 哈哈一笑 | 1990-05-06 |
+-------+----------+------------+
注意:基本表已经改变
(2)插入记录
语法:
insert into 数据表名 values(插入的数据,……,插入的数据n);
六、视图的删除
1. 总的语法
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]
MySQL:视图的更多相关文章
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- Mysql视图的作用及其性能分析
定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- 深入解析MySQL视图view
阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...
- MySQL视图view/存储过程和函数的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...
- MySQL视图更新
昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...
- 一个MySQL视图的优化过程
1.需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程.问题就是下面这个家伙: create o ...
- mysql视图和临时表的区别
视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...
- MySQL视图(view)
一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...
- 11.Mysql视图
11.视图11.1 什么是视图 视图view是一张虚拟表,它不存储数据,数据仍在表里,视图由一条查询表的select语句创建,视图只存储select语句. 可以将复杂的查询语句封装成视图,用户可以从视 ...
随机推荐
- eclipse无法断点调试JDK源码的问题
最近换了新版的eclipse,在jdk源码里面,打断点发现无法进入源码调试,程序直接跳过,已查资料发现自己eclipse配置的是jre环境的. 此处要配成jdk目录才有效 打开preferences, ...
- websocket 二合一
server from flask import Flask, request, render_template from geventwebsocket.handler import WebSock ...
- 使用SVN提交代码,快速简单的换地址方法
1.找到你项目所在的文档,然后删除.svn文件,如下图: 2.然后在使用小乌龟的图标,进行项目的导入,界面如下: 3.然后输入SVN库的地址,点击ok界面如下: 4.同步到eclipse的方法是,复制 ...
- 51nod1432贪心
n个人,已知每个人体重.独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人.显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟? Input 第一行包含 ...
- oracle group by placement可能导致错误结果的bug
Last week I’ve mentioned on Twitter that we ran into wrong result bug. We found workaround quickly b ...
- 转载:如何搭建turn server 在centos7上。
https://www.cnblogs.com/idignew/p/7440048.html
- 【GO】【sublime】
1.首先下载GO的安装包:https://golang.org/doc/install#testing 找到上面一个Download超大按钮,找不到的可以不用再看了. 下载完成,安装. 安装成功后,启 ...
- javascript五种基本类型
typeof 功能:检测变量的类型 语法:console.log(typeof 变量) 或 console.log(typeof (变量)): 五大基本类型 1.underfined 声明变量但是 ...
- jQuery中防止表单提交两次的方法
遇到过表单提交两次的情况,做个记录: 解决场景:首先是表单验证,其次是防止多次提交表单: jQuery中插件:validate_submitHandler_plugin,具体的可以使用关键字搜索: 使 ...
- react-thunk的使用流程
react-thunk作用:使我们可以在action中返回函数,而不是只能返回一个对象.然后我们可以在函数中做很多事情,比如发送异步的ajax请求. 这就是react-thunk的使用方法.接受一个d ...