11.Mysql视图
11.视图
11.1 什么是视图
视图view是一张虚拟表,它不存储数据,数据仍在表里,视图由一条查询表的select语句创建,视图只存储select语句。
可以将复杂的查询语句封装成视图,用户可以从视图中查询,以简化SQL编写;
视图中的数据只能查看,不能增删改,可用于权限管理;
屏蔽底层数据结构,对表的部分修改(新增列,修改列类型等)不影响视图的结构,不会对用户和应用程序产生影响。
11.2 视图操作
11.2.1 创建或者修改视图
创建视图语法:
create or replace [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
view view_name [(column_list)]
as select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION]
修改视图语法:
alter [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
view view_name [(column_list)]
as select_statement
[WITH [CASCADED|LOCAL] CHECK OPTION]
说明:
创建视图需要create view权限和drop view权限;
MySQL视图定义中From后不能使用子查询;
[WITH [CASCADED|LOCAL] CHECK OPTION] 指将视图数据更新为不满足视图条件时的设置;
LOCAL只要满足本视图的条件就可以更新;
CASCADED必须满足所有针对该视图的所有视图的条件才可以更新,默认CASCADED。
视图更新限制,含有下列关键字的视图不能做增删改:
聚合函数(sum\avg\max\min\count),去重distinct,分组group by ...having,合并union/union all;
常量视图;
连接join或子查询;
from一个不能更新的视图;
where子句的子查询引用了from子句中的表。
例子1:测试[WITH [CASCADED|LOCAL] CHECK OPTION]对视图更新的限制
create or replace view vw_emp as select * from emp where sal<3000;
create or replace view vw_emp_1 as select * from vw_emp where sal>1500 WITH LOCAL CHECK OPTION;
create or replace view vw_emp_2 as select * from vw_emp where sal>1500 WITH CASCADED CHECK OPTION;
select * from vw_emp_1;
select * from vw_emp_2;
update vw_emp_1 set sal=sal+1000 where empno=7566; -- ok
update vw_emp_2 set sal=sal+1000 where empno=7698; -- rror Code: 1369. CHECK OPTION failed 'scott.vw_emp_2'
例子2:不能做增删改的视图
create or replace view vw_emp_dname as select *,(select dname from dept where deptno=emp.deptno) dname from emp;
create or replace view vw_emp_dept as select emp.*,dname,loc from emp,dept where emp.deptno=dept.deptno;
11.2.2 删除视图
删除视图语法:
drop view [if exists] view_name,... [RESTRICT|CASCADE];
说明:
删除视图需要drop view权限;
例子:
drop view vw_emp_2;
11.2.3 查看视图
show tables; -- 既可以查看表,也可以查看视图。
show table status [from db_name] [like 'view_name']; -- 查看视图详细的状态信息
show create view view_name; -- 查看视图的定义
批量查看视图,则可以通过数据字典information_schema.views
select * from information_schema.views;
例子:
show table status like 'vw_emp_dept';
show create view vw_emp_dept;
-- 'CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vw_emp_dept` AS select `emp`.`EMPNO` AS `EMPNO`,`emp`.`ENAME` AS `ENAME`,`emp`.`JOB` AS `JOB`,`emp`.`MGR` AS `MGR`,`emp`.`HIREDATE` AS `HIREDATE`,`emp`.`SAL` AS `SAL`,`emp`.`COMM` AS `COMM`,`emp`.`DEPTNO` AS `DEPTNO`,`dept`.`DNAME` AS `dname`,`dept`.`LOC` AS `loc` from (`emp` join `dept`) where (`emp`.`DEPTNO` = `dept`.`DEPTNO`)'
select * from information_schema.views where table_schema='scott';
11.3 小结
11.Mysql视图的更多相关文章
- Mysql视图的作用及其性能分析
定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...
- mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
- MYSQL进阶学习笔记六:MySQL视图的创建,理解及管理!(视频序号:进阶_14,15)
知识点七:MySQL视图的创建(14) 视图的定义: 什么是视图: 视图数由查询结果形成的一张虚拟的表. 什么时候要用到视图? 如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询. ...
- mysql 视图 触发器 存储过程 函数事务 索引
mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...
- mysql视图初探
mysql视图初探 官方例子如下,从官方的例子就可以看出来视图就是提供一种快捷查询.用视图来查询一些常用的结果. mysql> help create view; Name: 'CREATE V ...
- 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- 深入解析MySQL视图view
阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...
随机推荐
- 为什么使用DLL
(1) 如果不同的程序使用相同的 DLL,只需将 DLL 在内存中装载一次,这样节省了系统内存.DLL 映射到每个进程(每运行一次应用程序)的专用地址空间中,但它们的代码使用的内存影像程序只在内存中装 ...
- 导入maven框架报错
原因pom文件第一行报错X org.apache.maven.archiver.mavenarchiver.getmanifest怎么解决 解决: 原因就是你的maven的配置文件不是最新的 1.he ...
- python 装饰器、递归原理、模块导入方式
1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...
- C# Winform添加全局快捷键(老板键)
using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.W ...
- 吴裕雄 python深度学习与实践(1)
#coding = utf8 import threading,time count = 0 class MyThread(threading.Thread): def __init__(self,t ...
- SPSS-非参数检验
非参数检验(卡方(Chi-square)检验.二项分布(Binomial)检验.单样本K-S(Kolmogorov-Smirnov)检验.单样本变量值随机性检验(Runs Test).两独立样本非参数 ...
- SSM框架下,使用ajax请求上传文件(doc\docx\excel\图片等)
1.准备工作 1.1.添加上传必要jar包 <dependency> <groupId>commons-io</groupId> <artifactId> ...
- 解题(PockerCompare-扑克牌比较大小)
题目描述 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 ...
- Jmeter(二十七)模拟发送TCP/UDP/HTTP/FTP等请求包(转载)
转载自 http://www.cnblogs.com/yangxia-test JMeter安装UDP插件后支持发送UDP协议的请求包,官方介绍安装插件后可以用来测试DNS, NTP, TFTP, B ...
- day25 面向对象之多态和鸭子类型
1.封装方法 如何封装:给方法名称前面加上双下划线 # ATM 的取款功能 # 1.插入银行卡 2.输入密码 3.选择取款金额 4.取款 class ATM: def __insert_card(se ...