视图

视图与表有很多相似的地方,视图也是由若干个字段以及若干条记录构成,视图也可以作为select语句的数据源。甚至在某些特定条件下,可以通过视图对表进行更新操作。

创建视图

视图中保存的仅仅是一条select语句,视图中的源数据都来自于数据库表,数据库表称为基表,视图称为虚表。基表的数据发生变化时,虚表的数据也会随之改变。创建视图的语法格式如下:

CREATE 或者REPLACE  VIEW  视图名(视图列)AS SELECT 表列别名FROM 表名

视图是数据库的对象,所以创建视图时,需要指定该视图隶属于哪个数据库;视图字段列表中的字段个数必须等于select语句字段列表中的字段个数。

为了区分视图与基本表,在命名视图时,通常加“view”前缀或“_view”后缀。

查看视图的定义

1.在choose数据库中成功地创建了视图course_view后,该视图的定义默认保存在数据库目录(例如choose目录)下,文件名为course_view.frm。使用记事本打开该文件,即可查看该视图的定义。

2.视图是一个虚表,也可以使用查看表结构的方式查看视图的定义,DESC course_view;

3.MySQL命令“show tables;”命令不仅显示当前数据库中所有的基表,也会将所有的视图罗列出来。

4.MySQL系统数据库information_schema的views表存储了所有视图的定义,使用下面的select语句查询该表的所有记录,也可以查看所有视图的详细信息。

select * from information_schema.views\G

修改视图

当基本表的某些字段发生变化的时候,可以通过修改数据库中存在的视图,来保持与基本表的一致性。语法如下:

CREATE OR REPLACE  VIEW 视图名(视图列名)AS SELECT  表列名

与创建视图的语句一致,当视图存在时,修改语句对视图进行修改;视图不存在时,创建。

ALTER语句是MySQL另外一种修改视图的方法,语法如下:

ALTER VIEW 视图名(视图列名)AS  SELECT 表列名

更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。

并不是所有的视图都可以更新,以下几种情况是不能更新视图的:
(1)视图中包含COUNT()、SUM()、MAX()和MIN()等函数。例如:

CREATE VIEW book_view1(a_sort,a_book)
AS SELECT sort,books, COUNT(name) FROM tb_book;

(2)视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVIG等关键字。例如:

CREATE VIEW book_view1(a_sort,a_book)
AS SELECT sort,books, FROM tb_book GROUP BY id;

(3)常量视图。例如:

CREATE VIEW book_view1
AS SELECT 'Aric' as a_book;

(4)视图中的SELECT中包含子查询。例如:

CREATE VIEW book_view1(a_sort)
AS SELECT (SELECT name FROM tb_book);

(5)由不可更新的视图导出的视图。例如:

CREATE VIEW book_view1 AS SELECT * FROM book_view2;

(6)创建视图时,ALGORITHM为TEMPTABLE类型。例如:

CREATE ALGORITHM=TEMPTABLE
VIEW book_view1 AS SELECT * FROM tb_book;

(7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。例如,表中包含的name字段没有默认值,但是视图中不包括该字段。那么这个视图是不能更新的。因为,在更新视图时,这个没有默认值的记录将没有值插入,也没有NULL值插入。数据库系统是不会允许这样的情况出现的,其会阻止这个视图更新。

注意:

视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,可能会造成数据更新失败。

删除视图

当视图不再需要时,可以将其删除,删除一个或多个视图可以使用DROP VIEW语句,删除视图必须拥有DROP权限。删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。语法如下:

DROP VIEW  IF EXISTS view_name [, view_name] ...

select语句的数据源:视图相关推荐

  1. SELECT 语句与其子句的详解

    SELECT 从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列.虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下: SELECT select_list [ INTO ...

  2. MS SQL入门基础:数据查询--SELECT语句

    数据库是为更方便有效地管理信息而存在的人们,希望数据库可以随时提供所需要的数据信息.因此,对用户来说,数据查询是数据 库最重要的功能.本章将讲述数据查询的实现方法. 在数据库中,数据查询是通过SELE ...

  3. MySql基础篇---002 SQL之SELECT使用篇: 基本的SELECT语句,运算符,排序与分页,多表查询,单行函数,聚合函数,子查询

    第03章_基本的SELECT语句 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑 ...

  4. MySQL学习之基本的SELECT语句

    SQL语言的分类 DDL(Data Definition Languages.数据定义语言),这些语句定义了不同的数据库.表.视图.索 引等数据库对象,还可以用来创建.删除.修改数据库和数据表的结构. ...

  5. GBase 8s SQL 指南:教程———6编写高级SELECT语句

    6编写高级SELECT语句 本章中增大了使用SELECT语句可执行的操作的范围.并使您能够执行更复杂的数据库查 询和数据处理.编写SELECT语句着重于SELECT语句语法中的五个子句.本章添加了 G ...

  6. 基本的SELECT语句

    1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖.在这几十年里,无数的技术.产业在这片江湖里沉浮,有的方兴未艾,有的已经几幕 ...

  7. MySQL3_基础_基本的 SELECT 语句

    文章目录 基本的 SELECT 语句 1. SQL概述 1.1 SQL背景知识 1.2 SQL语言排行榜 1.3 SQL 分类 2. SQL语言的规则与规范 2.2 SQL大小写规范 (建议遵守) 2 ...

  8. SELECT语句执行顺序

    其中: DISTINCT|UNIQUE|ALL:指定查询结果集中的重复记录 处理方式,默认值为ALL. select_list:指定从数据库中返回的目标列或表达式. query_table_expre ...

  9. 一文搞懂select语句在MySQL中的执行流程!

    MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多年后,想跳槽进入大厂, ...

最新文章

  1. (ASA) Cisco Web ××× 配置详解 [三部曲之一]
  2. 计算机粘贴功能不能用了,电脑复制粘贴不能用了【解决办法】
  3. 不用软件,手动修复双系统引导进win7,xp的多种方法
  4. Laravel自定义验证规则的实例与框架使用正则实例
  5. ecplice java run_java – EventDispatchThread.run()行:eclipse中不...
  6. 【NLP】Google BERT详解
  7. 使用工具ngrok 实现内网穿透(免费)
  8. “攀哥”离场 不掩融云组最强战舰技术顶流如云
  9. canvas时钟绘制方法总结
  10. 学而时习之语言篇: 我工作这么多年, 为什么不能准确读 “音标“ ?
  11. 华为2019届校招笔试题
  12. 护理自考本科科目计算机应用基础,护理自考本科考哪些科目
  13. java开花_那是花开-javaweb开发-51CTO博客
  14. 记一次某制造业ERP系统 CPU打爆事故分析
  15. C语言基础学习——基本数据类型(float型)
  16. 关于 “总机服务” 新增功能来电弹屏的功能说明
  17. 知网 万方 论文免费下载方法
  18. 什么是指令重排序?为什么要重排序?
  19. K8S中删除pod,又被重新创建的问题解决
  20. java 线程池控制多线程_Java多线程开发系列之四:玩转多线程(线程的控制1)...

热门文章

  1. 计算机的内存和cpu,内存与CPU二者之间的关系_Intel服务器CPU_服务器产业-中关村在线...
  2. FlvDownloader 2.0基本完成
  3. Python:masonite初体验TodoList
  4. java 将含有unicod的字符串 转成中文
  5. 透析美国次级贷款的危机(中国社科院经济所研究员 左大培)
  6. hpunix java环境变量_HP_UX 库环境变量设置
  7. 【genius_platform软件平台开发】第六十八讲:linux系统驱动开发之-驱动程序发送信号给应用程序
  8. vs编译C#程序,报错error CS0234命名空间“”中不存在类型或命名空间名“”(是否缺少程序集引用?)-实际已经引用了dll
  9. html选择器selector,网页解析神器-Selector选择器全面解析
  10. 矿井水怎么去总氮,树脂脱氮工艺解析