Mysql 学习笔记

Mysql 学习笔记(四)

视图(View)

➢ 从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据 库系统内部来看,一个视图是由SELECT 语句组成的查询定义的虚拟表,视图是由一 张或多张表中的数据组成的,从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。 视图是一个虚拟表,其内容由查询定义。

➢ 视图概述:

✓ 视图以经过定制的方式显示来自一个或多个表的数据

✓ 视图是一种数据库对象,用户可以象查询普通表一样查询视图。

✓ 视图内其实没有存储任何数据,它只是对表的一个查询。

✓ 视图的定义保存在数据字典内。创建视图所基于的表为“基表”。

✓ 视图一经定义以后,就可以像表一样被查询、修改、删除和更新

➢ 视图作用

✓ 简化数据查询语句

✓ 使用户能从多角度看到同一数据

✓ 提高了数据的安全性

✓ 提供了一定程度的逻辑独立性

✓ 减少带宽流量、优化后还可提高执行效率

➢ 视图优点

✓ 提供了另外一种级别的表安全性

✓ 隐藏的数据的复杂性

✓ 简化的用户的 SQL 命令

✓ 通过重命名列,从另一个角度提供数据

(1)视图的创建

1.创建命令

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

注:

➢ OR REPLACE:给定了 OR REPLACE 子句,语句能够替换已有的同名视图。

➢ ALGORITHM:可选的 mysql 算法扩展,算法会影响 MySQL 处理视图的方 式。有以下三个值: UNDEFINED--MySQL 将选择所要使用的算法。如果可能,它倾向于 MERGE 而不是 TEMPTABLE,这是因为 MERGE 通常更有效,而且如果使用了临时表,视图是不可更新的。 MERGE--会将引用视图的语句的文本与视图定义合并起来,使得视图定义 的某一部分取代语句的对应部分。TEMPTABLE--视图的结果将被置于临时表中,然后使用它执行语句。

1、MERGE,将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行。

2、TEMPTABLE,将视图的结果集存放在临时表中,每次执行时从临时表中操作。

3、UNDEFINED,默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新。所以,这里推荐使用MERGE算法类型视图。

view_name :视图名

column_list: 要想为视图的列定义明确的名称,列出由逗号隔开的列 名。column_list 中的名称数目必须等于 SELECT 语句检索的列数。若使用与源表或视图中相同的列名时可以省略 column_list。

select_statement : 用来创建视图的 SELECT 语句,可在 SELECT 语 句中查询多个表或视图。但对 SELECT 语句有以下的限制: 1. 定义视图的用户必须对所参照的表或视图有查询(即可执行 SELECT 语句)权限; 2. 在定义中引用的表或视图必须存在;

WITH [cascaded|local] CHECK OPTION:在关于可更新视图的 WITH CHECK OPTION 子句中,当视图是根据另一个视图定义的时,LOCAL 和 CASCADED 关键字决定了检查测试的范围。LOCAL 关键字对 CHECK OPTION 进行了限制,使其仅作用在定义的视图上,CASCADED 会对将进行评估的基表进行检查。如果未给定任一关键字,默认值为 CASCADED。WITH CHECK OPTION 指出在可更新视图上所进行的修改都要符合 select_statement 所指定的 限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。

例子:create view student_index as select sno,sname,from student; 

视图--1

(2)修改视图

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

注: 该语句用于更改已有视图的定义。其语法与 CREATE VIEW 类似。该语句需要具有 针对视图的 CREATE VIEW 和 DROP 权限,也需要针对 SELECT 语句中引用的每一列的 某些权限。

例子:alter view student_index as select sno as '学号',sname as '姓名',sage as '年龄' from student; 

视图--2

(3)查看视图

SHOW CREATE VIEW view_name;

例子:show create view student_index; 

视图--1
视图--3

(4)删除视图

DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]

说明:

1、DROP VIEW 能够删除 1 个或多个视图。必须在每个视图上拥有 DROP 权限。

2、可以使用关键字 IF EXISTS 来防止因不存在的视图而出错。

3、如果给定了 RESTRICT 和 CASCADE,将解析并忽略它们。

例子:drop view student_index; 

视图--4

(5)更新视图

概述:

➢ 视图的使用与表一样,有增删改查四种操作,且语法也与表相同。

➢ 在视图上也可以使用修改数据的 DML 语句,如 INSERT、UPDATE 和 DELETE 可以统称为“通过视图更新数据”。

➢ 通过视图更新数据有如下限制:

✓ 一次只能修改一个底层的基表

✓ 如果修改违反了基表的约束条件,则无法更新视图

✓ 如果视图中的列不是表中的原始列(如创建视图时使用了连接操作符、 聚合函数等),则不能通过视图更新。

视图更新操作:

➢ 可更新的视图:要通过视图更新基本表数据,必须保证视图是可更新视图, 即可以在 INSET、UPDATE 或 DELETE 等语句当中使用它们。对于可更新 的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一 些特定的其他结构,这类结构会使得视图不可更新。

如果视图包含下述结 构中的任何一种,那么它就是不可更新的:

✓ 聚合函数;

✓ DISTINCT 关键字;

✓ GROUP BY 子句;

✓ ORDER BY 子句;

✓ HAVING 子句;

✓ UNION 运算符;

✓ 位于选择列表中的子查询;

✓ FROM 子句中包含多个表;

✓ SELECT 语句中引用了不可更新视图;

➢ 插入数据

使用 INSERT 语句通过视图向基本表插入数据

注意:

✓ 当视图所依赖的基本表有多个时,不能向该视图插入数据,因为这将 会影响多个基本表。 ✓ 对 INSERT 语句还有一个限制:SELECT 语句中必须包含 FROM 子句 中指定表的所有不能为空的列。

➢ 修改数据:使用 UPDATE 语句可以通过视图修改基本表的数据 注意:若一个视图依赖于多个基本表,则一次修改该视图只能变动一个基本表的数据。

➢ 删除数据:使用 DELETE 语句可以通过视图删除基本表的数据 注意:对依赖于多个基本表的视图,不能使用 DELETE 语句。

视图--5
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 目录 MySQL简介 基本输入查询 创建并使用数据库 SELECT语句 选择特殊行 条件 通配符 选择特殊列 排序...
    鬼宇书生阅读 1,031评论 2 1
  • 优化SQL语句的一般步骤 通过show status 命令了解各种SQL的执行频率,具体命令如下: 1. 命令显示...
    来自火星程序猿阅读 668评论 0 1
  • 目标: 1)熟练过关金融培训话术 2)十月是收获的月份,基金公司朋友们都来公司考察开单,恬妈,艳子,许大哥及他很多...
    gracelij阅读 174评论 0 0
  • https://github.com/dsxNiubility/Wonderful方法比较杂 另外 对颜色的拓展比...
    居然是村长阅读 714评论 0 2
  • 何文先生在林科院博士毕业后,轰轰烈烈的离开北京南下工作了。 一方面因为北京的房价居高不下,尽管托国家宏观政策调控的...
    钰猫阅读 619评论 2 48