目录

前置建表

一、什么是视图

二、为什么使用视图

三、视图的规则和限制

四、视图的增删改查

五、视图数据的更新


前置建表

CREATE TABLE student (id int NOT NULL AUTO_INCREMENT COMMENT '主键',code varchar(255) NOT NULL COMMENT '学号',name varchar(255) DEFAULT NULL COMMENT '姓名',sex enum('男','女') DEFAULT NULL COMMENT '性别',age  int(0)  NULL COMMENT '年龄',PRIMARY KEY (`id`)
);INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (1, '20220101', '张三', '男', 12);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (2, '202202', '李四', '男', 14);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (3, '202203', '王五', '女', 10);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (4, '202204', '张三飞', '男', 20);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (5, '202205', '小丽', '女', 10);
INSERT INTO `test`.`student`(`id`, `code`, `name`, `sex`, `age`) VALUES (6, '202206', '小明', '男', 11);CREATE TABLE `score` (`id` int NOT NULL AUTO_INCREMENT,`studentcode` int DEFAULT NULL,`score` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;INSERT INTO `test`.`score`(`id`, `studentcode`, `score`) VALUES (1, 20220101, 70);
INSERT INTO `test`.`score`(`id`, `studentcode`, `score`) VALUES (2, 202202, 99);
INSERT INTO `test`.`score`(`id`, `studentcode`, `score`) VALUES (3, 202203, 100);
INSERT INTO `test`.`score`(`id`, `studentcode`, `score`) VALUES (6, 202206, 69);

数据如下

     ​​​​​​

一、什么是视图

视图是一种简单的数据查询机制。不同于表,视图不涉及数据存储,因此读者不用担心视图会充满磁盘空间。读者可以先通过命名select 语句来创建视图,然后将这个查询保存起来供其他用户使用,而其他用户使用这个视图时就像他们自己在直接查询数据。视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

二、为什么使用视图

1、重用SQL语句。 
2、简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
3、使用表的组成部分而不是整个表。
4、保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
5、更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据

三、视图的规则和限制

1、与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
2、对于可以创建的视图数目没有限制。
3、为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
4、视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
5、ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
6、视图不能索引,也不能有关联的触发器或默认值。
7、视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。

四、视图的增删改查

1、视图用CREATE VIEW语句来创建。
2、使用SHOW CREATE VIEW viewname;来查看创建视图的语句。
3、用DROP删除视图,其语法为DROP VIEW viewname;。
4、更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR  REPLACE VIEW。如果要更新的视图不存在,则第2条更新语句会创建一个视图;如果要更新的视图存在,则第2条更新语句会替换原有视图。

--创建一个名为stu_score 的视图用于保存学生和成绩信息
CREATE VIEW stu_score as SELECT a.code,a.name,a.sex,a.age,b.score FROM student a LEFT join  score b on a.code=b.studentcode ;

这个时候score给张三飞增加一个成绩记录为90分,可以看到视图也进行了变化

五、视图数据的更新

如果提供给用户一系列视图作为检索数据使用,那么用户也需要修改同一数据怎么办?强迫用户使用视图检索,又允许他们使用update或insert 语句自己修改基础数据。这似乎有点奇怪。为此,MySQL、Oracle数据库和SQL Server都允许用户在遵守特定规则的前提下通过视图修改数据。对于MySQL来说,如果下面的条件能够满足,那么视图就是可更新的:
1、没有使用聚合函数(max()、min()和 avg()等);
2、视图没有使用group by或having子句;
3、select或from子句中不存在子查询,并且 where子句中的任何子查询都不引用from子句中的表;
4、视图没有使用union、union all和 distinct;from子句包括不止一个表或可更新视图;
5、如果有不止一个表或视图,那么from子句只使用内连接。

比如创建一个简单的视图

CREATE VIEW stu_test as SELECT a.code,a.name,a.sex,a.age  FROM student a   ;

然后更新一条数据

update stu_test  set age=101 where code='202205'

更新后的视图数据

更新视图后的student表数据也会跟着变更

零基础学SQL(十一、视图)相关推荐

  1. 零基础学SQL(1):初识数据库与SQL

    零基础学SQL(1):初识数据库与SQL 一.初识数据库 数据库是将大量数据保存起来,通过计算机加工而成的可以 进行高效访问的数据集合.该数据集合称为数据库(Database,DB).用来管理数据库的 ...

  2. 零基础学sql要多久_成人零基础学习钢琴,要多久能学会?

    越来越多的人都开始在开始工作之后想要练习一门技艺了.不知道大家身边的朋友是不是也在报一些培训班,健身班,瑜伽班,舞蹈班.每个人都有自己向往的生活与目标,那学会钢琴,也慢慢变成了更多喜爱音乐的朋友的目标 ...

  3. 零基础学sql要多久_零基础小白如何迈出学习SQL的第一步?文科生学SQL的心得

    本文适用对象:从没接触过编程的零基础小白 首先,判断是否需要学习SQL 学习的第一步:了解SQL的用途. 比如你的目的是处理小量数据,那么excel就能满足需求,且excel简单易学,适用性广,这种情 ...

  4. 零基础学SQL(二、MYSQL数据类型)

    目录 一.数据类型 一.数值型数据 1.整数类型 2.小数类型 二.字符串类型 1.char 2.VARCHAR 3.BLOB和TEXT类型 三.日期和时间类型 四.枚举类型 五.set类型 一.数据 ...

  5. 零基础学SQL(九、分组 GROUP BY)

    目录 前置建表 ​编辑 一.分组的概念 二.分组案例 三.分组的过滤HAVING子句 前置建表 CREATE TABLE student (id int NOT NULL AUTO_INCREMENT ...

  6. 零基础学SQL(四、可视化工具连接数据库、数据库创建及删除)

    目录 一.使用Navicat链接MYSQL 二.创建数据库 1.创建数据库的命令 2.删除数据库  删库需谨慎 3.修改数据库名称 三.可视化工具操作 1.创建数据库 2.删除数据库 删库需谨慎 一. ...

  7. 零基础学SQL(十三、事务)

     目录 前置建表 ​编辑 一.什么是事务 二.事务特性ACID 1.原子性(Atomicity) 2.一致性(Consistency) 3.隔离性(Isolation) 4.持久性(Durabilit ...

  8. 零基础学SQL(十、子查询与多表关联)

    目录 前置建表 ​编辑     编辑 一.子查询 1.什么是子查询 2.子查询的类型 二.表关联查询 1.连接分类 1.1.交叉连接 (CROSS JOIN) 1.2.内连接(inner join) ...

  9. 零基础学SQL(六、数据的增删改查简单语句)

    目录 前置建表 一.数据的插入 1.插入数据语法 1.1.插入完整的行 1.2.插入行的一部分 1.3 .插入多行 1.4.插入某些查询的结果 二.数据的简单查询 1.查询数据语法 三.数据的修改 1 ...

最新文章

  1. ORACLE11g中创建裸设备
  2. tensorflow 集成开发环境 (IDE)
  3. win10下使用wget
  4. ngx_lua模块API说明
  5. Nginx server之Nginx作为反向代理服务器
  6. 如何把 .NET 进程中的所有托管异常找出来?
  7. mysql 视图树查询_TreeView (树视图)遍历数据库的方法
  8. 机器学习算法的流程总结
  9. Latex安装教程(附美赛论文latex模板)
  10. Dilated Convolutions 空洞卷积
  11. 计算机课评课意见,信息技术应用 用计算机画函数图象第一课时评课稿
  12. 移动硬盘提示“需要格式化”
  13. vector subscript out of range
  14. 19款探岳刷隐藏教程_19款探岳怎么选,小编在此支你几招 拿起小本本记住了
  15. Archlinux安装yaourt
  16. CIMISS数据获取流程
  17. 为什么signed char的范围是-128~127
  18. HNU-计算机系统-讨论课5
  19. C语言:如何判断回文数
  20. 【yolov5检测代码简化】Yolov5 detect.py推理代码简化,输入图片,输出图片和结果

热门文章

  1. 2022新版域名防红系统源码
  2. 如何进行有效的计划管理?
  3. App应用字体大小保持固定以及关于Configuration的变化
  4. win10下java的下载、安装和配置环境教程,超级详细
  5. R语言绘制山脊图 ggridge,如何给每个山脊添加自定义垂直线?
  6. 让行动持续下去的动力-《刻意练习》读后感
  7. 将U盘的图标改成自己喜欢的图案
  8. 官网下载Eclipse详细步骤
  9. 多部分元件原理图封装的画法
  10. AURIX TriCore学习笔记四:LwIP裸机移植