笔记-7:mysql视图
1.视图概述
2.创建视图
CREATE [OR REPLACE] VIEW view_name [(column_list)]
AS SELECT_statement
[WITH { CASCADED | LOCAL} CHECK OPTION] # OR REPLACE:可选项,用于指定OR REPLACE子句,该语句用于替换数据库中已存在的同名视图,但需要该视图上具有DROP权限。
# view_name:指定视图名称。视图名称在数据库中必须唯一。
# column_list:为每个列指定明确的名称。
# SELECT_statement:指定创建视图的SELECT语句。
# WITH CHECK OPTION:可选项,用于指定在可更新视图上所进行的修改都需要符合select_statement中所指定的限制条件。
# 在数据库中创建视图v_student,要求该视图包含客户信息表tb_student中所有男生的信息,并且保证今后对该视图数据的修改都必须符合学生性别为男性这个条件。
create or replace VIEW v_student as select * from tb_student where sex='男' WITH CHECK OPTION;
# 创建视图v_score_avgs,要求视图包含表tb_score中所有学生的学号和平均成绩,并按学号studentNo进行排序。
create or replace VIEW v_score_avgs as select studentNo,avg(score) from tb_score group by studentNo;
# 使用WITH CHECK OPTION子句创建视图v_score,要求该视图包含表tb_score中所有score<90的学生学号、课程号、成绩信息。
create VIEW v_score as select * from tb_score where score<90 WITH CHECK OPTION;
3.删除视图
# 语法结构:
drop VIEW [if exists] view_name;
# 删除视图v_score、v_score_local、v_score_cascaded
drop VIEW if exists v_score,v_score_local,v_score_cascaded;
4.修改视图定义
alter VIEW view_name [(column_list)] as SELECT_statement [WITH [CASCADED | LOCAL] CHECK OPTION];
# 使用ALTER VIEW语句修改视图v_student的定义,要求该视图包含tb_student中性别为‘男’,民族为‘汉’的学生的学号、姓名、所属班级,并且要求保证今后对该视图数据的修改都必须符合学生性别为‘男’,民族为‘汉’这个条件。
alter VIEW v_student (studentNo,studentName,classNo) as select studentNo,studentName,classNo from tb_student where sex='男' and nation='汉' WITH CHECK OPTION;
5.查看视图定义
# 语法结构:
SHOW CREATE VIEW view_name;
# 查看数据库v_student的定义
show create VIEW v_student;
6.更新视图数据
6.1 使用insert语句通过视图向基础表插入数据
# 向视图v_student中插入一条记录:('','周明','男','1997-08-16','湖北','汉','IS1401')
insert into v_student values ('','周明','男','1997-08-16','湖北','汉','IS1401');
select * from v_student;
6.2 使用update语句通过视图修改基础表的数据
# 将视图v_student中所有学生的native列更新为"湖北"
update v_student set native='湖北';
6.3 使用delete语句通过视图删除基础表的数据
# 删除视图v_student中姓名为'周明'的学生信息
delete from v_student where studentName='周明'; # 对于依赖多个基础表的视图,不能使用DELETE语句
当视图包含以下任何一种SQL语句结构时,该视图不可更新。
- 聚合函数
- DISTINCT关键字
- CROUP BY子句
- ORDER BY子句
- HAVING子句
- UNION运算符
- 位于选择列表中的子查询
- FROM子句中包含多个数
- SELECT 语句中引用了不可更新视图
- WHERE子句中的子查询,引用FROM子句中的表
7.使用视图需要注意的地方
- 创建视图必须具有足够的访问权限
- 对于可以创建的视图数目没有限制
- 视图可以嵌套
- 视图不能索引,不能有关联的触发器、默认值
- order by子句可以用在视图中。但如果从该视图检索数据的select子句中也具有order by子句,则会被覆盖
笔记-7:mysql视图的更多相关文章
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- MYSQL进阶学习笔记六:MySQL视图的创建,理解及管理!(视频序号:进阶_14,15)
知识点七:MySQL视图的创建(14) 视图的定义: 什么是视图: 视图数由查询结果形成的一张虚拟的表. 什么时候要用到视图? 如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询. ...
- MySQL视图更新
昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...
- mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
- 【笔记】MySQL的基础学习(二)
[笔记]MySQL的基础学习(二) MySQL 老男孩 一 视图 视图其实就是给表起个别名 1.创建视图 格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS ...
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- Mysql视图的作用及其性能分析
定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...
- 深入解析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视图的优化过程
1.需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程.问题就是下面这个家伙: create o ...
随机推荐
- python3 系统监控脚本(CPU,memory,网络,disk等)
#!/usr/bin/env python3 #create at 2018-11-30 'this is a system monitor scripts' __author__="yjt ...
- 如何在OpenFOAM中增加边界条件【翻译】
注:如有翻译不妥,还请见谅 翻译自:http://openfoamwiki.net/index.php/HowTo_Adding_a_new_boundary_condition 首先请看:http: ...
- Go by Example-变量
在上一节中提到了值类型,但是他们都是写在输出语句里的,如果后面程序需要用的话就显得非常的不方便,所以更好的办法就是把它们定义成变量,然后在调用. 变量 和Python不同的是,Go语言中的变量是需要的 ...
- [RK3399] 调试串口ttyS2改为普通串口
CPU:RK3399 系统:Android 7.1 串口需求量大时,会选择使用 spi 转串口,但是数据量大或者波特率较高时,传输会丢包. 调试串口 ttyS2 也可以让出来,供上层使用,下面是将 t ...
- 对象转型、迭代器Iterator、Set集合、装箱与拆箱、基本数据类型与字符串的转换、TreeSet集合与对象
包的声明与定义 需要注意的是,包的声明只能位于Java源文件的第一行. 在实际程序开发过程中,定义的类都是含有包名的: 如果没有显式地声明package语句,创建的类则处于默认包下: 在实际开发中 ...
- wordpress插件开发流程梳理-二
开发插件的最佳实践 避免命名冲突 当您的插件对变量,函数或类使用相同的名称作为另一个插件时,会发生命名冲突. 幸运的是,您可以使用以下方法避免命名冲突. 程序性 默认情况下,所有变量,函数和类都在全局 ...
- 使用ConstraintLayout(约束布局)构建响应式UI
使用ConstraintLayout(约束布局)构建响应式UI 转 https://www.300168.com/yidong/show-2740.html 核心提示:ConstraintLa ...
- nmealib-0.5.3 问题 Build Error: undefined reference to `ceil'
When building on Ubuntu 12.x the build fails with the following error… gcc samples/generate/main.o - ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_13-用户退出-前端
调试前端的退出 logout方法 找到路由 退出对应的组件页面 这就是退出的组件 退出的方法 把这两个js的引用,从上面复制到下面引用.因为可能存在js的冲突问题. 资料里面给了一个前端 整个覆盖当前 ...
- Laravel 项目开发环境配置
1.首先安装Laravel 依赖管理包工具 Composer (前提是本地装好了PHP php -v) php -r "copy('https://install.phpcomposer. ...