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视图的更多相关文章

  1. MYSQL视图的学习笔记

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

  2. MYSQL进阶学习笔记六:MySQL视图的创建,理解及管理!(视频序号:进阶_14,15)

    知识点七:MySQL视图的创建(14) 视图的定义: 什么是视图: 视图数由查询结果形成的一张虚拟的表. 什么时候要用到视图? 如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询. ...

  3. MySQL视图更新

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

  4. mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数

    mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...

  5. 【笔记】MySQL的基础学习(二)

    [笔记]MySQL的基础学习(二) MySQL 老男孩  一 视图 视图其实就是给表起个别名 1.创建视图 格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS ...

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

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

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

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

  8. 深入解析MySQL视图view

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

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

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

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

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

随机推荐

  1. Cannot initialize a variable of type 'Stu *' with an rvalue of type 'void *'

    code: 将 Stu* pStu = malloc(sizeof(Stu)); 改为Stu* pStu = (Stu*)malloc(sizeof(Stu)); code #include < ...

  2. hdu6731 Angle Beats(ccpc秦皇岛A,计算几何)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6731 题意: 给出$n$个点,有$q$次询问 每次询问给出一个点$b$,求这$n+1$个点,组成直角 ...

  3. cesium地下模式(地表透明)4

    这篇博客主要罗列一下解决地下模式(地表透明)的相关资源 1.Cesium的Github仓库地下模式issue 有人提了这个问题,但是cesium官方没有解决这个问题,持续跟踪一下问题说不定哪天官方就解 ...

  4. Java 单例设计模式之 饿汉式和懒汉式

    public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...

  5. python3编程基础之一:操作

    基本操作有:读数据.写数据.运算.控制.输入.输出.语句块 1.读取数据: num1 = 50 num2 = num1 //通过num2取得num1的值,这就是逻辑上的读取 测试数据:print(nu ...

  6. 数据结构Java版之排序算法(二)

    排序按时间复杂度和空间复杂度可分为 低级排序 和 高级排序 算法两种.下面将对排序算法进行讲解,以及样例的展示. 低级排序:冒泡排序.选择排序.插入排序. 冒泡排序: 核心思想,小的数往前移.假设最小 ...

  7. Python实现协程

    什么是进程和线程 有一定基础的小伙伴们肯定都知道进程和线程. 进程是什么呢? 直白地讲,进程就是应用程序的启动实例.比如我们运行一个游戏,打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资 ...

  8. Idea 运行测试NoSuchMethodError Junit5

    1.背景 环境: macOS 10.13.4 idea: 2016.3 springboot 版本: 2.2.2.RELEASE pom依赖 <dependencies> <depe ...

  9. Android简单实现滚动悬停效果

    import android.content.Context; import android.support.design.widget.TabLayout; import android.suppo ...

  10. initGLWidgetAndViewer

    void initGLWidgetAndViewer() { osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::Vie ...