请选择 进入手机版 | 继续访问电脑版

12360技术网 - 专业IT技术发表平台

 立即注册  找回密码
查看: 6087|回复: 4

select语句的数据源:视图

[复制链接]

25

主题

33

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
发表于 2020-1-16 19:56:05 | 显示全部楼层 |阅读模式
视图

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

创建视图

视图中保存的仅仅是一条select语句,视图中的源数据都来自于数据库表,数据库表称为基表,视图称为虚表。基表的数据发生变化时,虚表的数据也会随之改变。创建视图的语法格式如下:
  1. 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语句查询该表的所有记录,也可以查看所有视图的详细信息。
  1. select * from information_schema.views\G
复制代码
修改视图

当基本表的某些字段发生变化的时候,可以通过修改数据库中存在的视图,来保持与基本表的一致性。语法如下:
  1. CREATE OR REPLACE  VIEW 视图名(视图列名)AS SELECT  表列名
复制代码
与创建视图的语句一致,当视图存在时,修改语句对视图进行修改;视图不存在时,创建。

ALTER语句是MySQL另外一种修改视图的方法,语法如下:
  1. ALTER VIEW 视图名(视图列名)AS  SELECT 表列名
复制代码
更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
并不是所有的视图都可以更新,以下几种情况是不能更新视图的:
(1)视图中包含COUNT()、SUM()、MAX()和MIN()等函数。例如:
  1. 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等关键字。例如:
  1. CREATE VIEW book_view1(a_sort,a_book)AS SELECT sort,books, FROM tb_book GROUP BY id;
复制代码
(3)常量视图。例如:
  1. CREATE VIEW book_view1AS SELECT 'Aric' as a_book;
复制代码
(4)视图中的SELECT中包含子查询。例如:
  1. CREATE VIEW book_view1(a_sort)AS SELECT (SELECT name FROM tb_book);
复制代码
(5)由不可更新的视图导出的视图。例如:
  1. CREATE VIEW book_view1 AS SELECT * FROM book_view2;
复制代码
(6)创建视图时,ALGORITHM为TEMPTABLE类型。例如:
  1. CREATE ALGORITHM=TEMPTABLEVIEW book_view1 AS SELECT * FROM tb_book;
复制代码
(7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。例如,表中包含的name字段没有默认值,但是视图中不包括该字段。那么这个视图是不能更新的。因为,在更新视图时,这个没有默认值的记录将没有值插入,也没有NULL值插入。数据库系统是不会允许这样的情况出现的,其会阻止这个视图更新。
注意:

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

当视图不再需要时,可以将其删除,删除一个或多个视图可以使用DROP VIEW语句,删除视图必须拥有DROP权限。删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。语法如下:
  1. DROP VIEW  IF EXISTS      view_name [, view_name] ...
复制代码
                                                                                                                                       
                                                    
  • 点赞                        1                        
  • 收藏                        
  • 分享                                                                                                                        
  •                                                         
                                      
    • 文章举报                           
                                                
                                                                        
                                            
                                                        Dwell_hls                                                                发布了144 篇原创文章 · 获赞 29 · 访问量 1万+                                                                                            私信                                                            关注
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x




上一篇:SQL基础学习笔记--1--查询基础
下一篇:《深入理解MySQL主从原理32讲》推荐篇
回复

使用道具 举报

0

主题

18

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
发表于 2020-1-22 22:39:58 | 显示全部楼层
我看不错噢 谢谢楼主![www.12360.co]
回复

使用道具 举报

0

主题

12

帖子

262

积分

中级会员

Rank: 3Rank: 3

积分
262
发表于 2020-1-23 22:37:58 | 显示全部楼层
感谢楼主的无私分享![www.12360.co]
回复

使用道具 举报

0

主题

24

帖子

514

积分

高级会员

Rank: 4

积分
514
发表于 2020-1-24 17:19:34 | 显示全部楼层
其实我一直觉得楼主的品味不错!呵呵![www.12360.co]
回复

使用道具 举报

0

主题

25

帖子

535

积分

高级会员

Rank: 4

积分
535
发表于 2020-2-11 00:42:15 | 显示全部楼层
楼主,大恩不言谢了![www.12360.co]
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

12360技术网

GMT+8, 2020-2-29 14:39 , Processed in 0.088631 second(s), 27 queries .

本网站内容收集于互联网,Www.12360.Co不承担任何由于内容的合法性及健康性所引起的争议和法律责任。 欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。

© 2019-2020 Www.12360.Co

快速回复 返回顶部 返回列表