1.   修改、查询、删除记录时都会提示多少条记录被影响,但建表不会提示。当表的数据修改后反映到视图。

修改、查询、删除视图的命令跟建表时的一样。

视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。可以根据他们的不同需求,在物理的数据库上定义他们对数据库所要求的数据结构,这种根据用户观点所定义的数据结构就是视图。

视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

视图一经定义以后,就可以像表一样被查询、修改、删除和更新。2.使用视图有下列优点:

(1)为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。  www.2cto.com

(2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。

(3)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性。

(4)便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次。

(5)可以重新组织数据以便输出到其他应用程序中。

3. 使用create view语句创建视图

语法格式:

CREATE [re replace] [algorithm = {undefined | merge | temptable}]  view 视图名[(column_list)]

as select_statement  [with [cascaded| local] check option]

例:create view v_xs

as select *from xs;(在xsdb库下创建)

|xsdb.xs(在飞xsdb库下建xsdb里的表的视图)

说明:

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

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

●  algorithm子句:可选的ALGORITHM子句是对标准SQL的MySQL扩展,规定了MySQL的算法,算法会影响MySQL处理视图的方式。ALGORITHM可取3个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。指定了MERGE选项,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。MERGE算法要求视图中的行和基表中的行具有一对一的关系,如果不具有该关系,必须使用临时表取而代之。指定了TEMPTABLE选项,视图的结果将被置于临时表中,然后使用它执行语句。

●   select_statement:用来创建视图的SELECT语句,可在SELECT语句中查询多个表或视图。但对SELECT语句有以下的限制:

(1)定义视图的用户必须对所参照的表或视图有查询(即可执行SELECT语句)权限;

(2)不能包含FROM子句中的子查询;

(3)不能引用系统或用户变量;

(4)不能引用预处理语句参数;

(5)在定义中引用的表或视图必须存在;

(6)若引用不是当前数据库的表或视图时,要在表或视图前加上数据库的名称;

(7)在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,则视图定义中的ORDER BY将被忽略。

(8)对于SELECT语句中的其他选项或子句,若视图中也包含了这些选项,则效果未定义。例如,如果在视图定义中包含LIMIT子句,而SELECT语句使用了自己的LIMIT子句,MySQL对使用哪个LIMIT未做定义。

●   WITH CHECK OPTION:指出在可更新视图上所进行的修改都要符合select_statement所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。当视图是根据另一个视图定义的时,WITH CHECK OPTION给出两个参数:LOCAL和CASCADED。它们决定了检查测试的范围。Local关键字使CHECK OPTION只对定义的视图进行检查,cascaded则会对所有视图进行检查。如果未给定任一关键字,默认值为CASCADED。

4. 注意,使用视图时,要注意下列事项:

(1)在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时,应将名称指定为db_name.view_name。  www.2cto.com

(2)视图的命名必须遵循标志符命名规则,不能与表同名,且对每个用户视图名必须是唯一的,即对不同用户,即使是定义相同的视图,也必须使用不同的名字。

(3)不能把规则、默认值或触发器与视图相关联。

(4)不能在视图上建立任何索引,包括全文索引。

5.例1: 假设当前数据库是TEST,创建XSCJ数据库上的CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业名为计算机这个条件。

CREATEOR REPLACE VIEW  XSCJ.CS_KC

AS  SELECT XS.学号,课程号,成绩

FROMXSCJ.XS,  XSCJ.XS_KC

WHERE  XS.学号 = XS_KC.学号 AND XS.专业名 = '计算机'  WITH CHECK OPTION;

例2: 查找平均成绩在80分以上的学生的学号和平均成绩。

本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。  www.2cto.com

创建学生平均成绩视图XS_KC_AVG:

CREATEVIEW XS_KC_AVG ( num,score_avg )

AS  SELECT 学号, AVG(成绩)

FROMXS_KC  GROUP BY 学号;

再对XS_KC_AVG视图进行查询。

SELECT* FROM XS_KC_AVG

WHEREscore_avg>=80;

从以上两例可以看出,创建视图可以向最终用户隐藏复杂的表连接,简化了用户的SQL程序设计。

注意:使用视图查询时,若其关联的基本表中添加了新字段,则该视图将不包含新字段。例如,视图CS_XS中的列关联了XS表中所有列,若XS表新增了“籍贯”字段,那么CS_XS视图中将查询不到“籍贯”字段的数据。

如果与视图相关联的表或视图被删除,则该视图将不能再使用。

6.  可更新视图

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

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

www.2cto.com

(1)聚合函数;

(2)DISTINCT关键字;

(3)GROUP BY子句;

(4)ORDER BY子句;

(5)HAVING子句;

(6)UNION运算符;

(7)位于选择列表中的子查询;

(8)FROM子句中包含多个表;

(9)SELECT语句中引用了不可更新视图;

(10)WHERE子句中的子查询,引用FROM子句中的表;

(11)ALGORITHM 选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。

7.  插入数据

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

例: 创建视图CS_XS,视图中包含计算机专业的学生信息,并向CS_XS视图中插入一条记录:('081255','李牧','计算机',1,'1990-10-21',50,NULL,NULL)。

首先创建视图CS_XS:(以下的删除、修改都是用该表)

CREATEOR REPLACE VIEW CS_XS

www.2cto.com

AS  SELECT* FROM XS

WHERE 专业名 = '计算机'  WITH CHECK OPTION;

注意:在创建视图的时候加上WITH CHECK OPTION子句,是因为WITH CHECK OPTION子句会在更新数据的时候检查新数据是否符合视图定义中WHERE子句的条件。WITH CHECKOPTION子句只能和可更新视图一起使用。

接下来插入记录:

INSERTINTO CS_XS

VALUES('081255', '李牧', '计算机', 1, '1990-10-14',50, NULL, NULL);

注意:这里插入记录时专业名只能为“计算机”。

这时,使用SELECT语句查询CS_XS视图和基本表XS,就可发现XS表中该记录已经被添加。

当视图所依赖的基本表有多个时,不能向该视图插入数据,因为这将会影响多个基本表。例如,不能向视图CS_KC插入数据,因为CS_KC依赖两个基本表:XS和XS_KC。

对INSERT语句还有一个限制:SELECT语句中必须包含FROM子句中指定表的所有不能为空的列。例如,若CS_XS视图定义的时候不加上“姓名”字段,则插入数据的时候会出错。

www.2cto.com

8.  修改数据

使用UPDATE语句可以通过视图修改基本表的数据

例: 将CS_XS视图中所有学生的总学分增加8。

UPDATECS_XS SET 总学分 = 总学分+ 8;

该语句实际上是将CS_XS视图所依赖的基本表XS中所有记录的总学分字段值在原来基础上增加8。

若一个视图依赖于多个基本表,则一次修改该视图只能变动一个基本表的数据。

例: 将CS_KC视图中学号为081101的学生的101课程成绩改为90。

UPDATECS_KC  SET 成绩=90

WHERE 学号='081101' AND 课程号='101';

本例中,视图CS_KC依赖于两个基本表:XS和XS_KC,对CS_KC视图的一次修改只能改变学号(源于XS表)或者课程号和成绩(源于XS_KC表)。

以下的修改是错误的:

UPDATECS_KC  SET 学号='081120',课程号='208'

www.2cto.com

WHERE 成绩=90;

9.  删除数据

使用DELETE语句可以通过视图删除基本表的数据

例: 删除CS_XS中女同学的记录。

DELETEFROM CS_XS  WHERE 性别 = 0;

注意:对依赖于多个基本表的视图,不能使用DELETE语句。例如,不能通过对CS_KC视图执行DELETE语句而删除与之相关的基本表XS及XS_KC表的数据。

10.使用ALTER语句可以对已有视图的定义进行修改。

语法格式:

ALTER[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]  AS select_statement

[WITH [CASCADED | LOCAL] CHECK OPTION]

ALTERVIEW语句的语法和CREATE VIEW类似

例: 将CS_XS视图修改为只包含计算机专业学生的学号、姓名和总学分。

USEXSCJ;

ALTERVIEW CS_XS

AS  SELECT 学号,姓名,总学分  FROM XS

WHERE 专业名 = '计算机';

11.  使用SQL语句删除视图

www.2cto.com

语法格式:

dropVIEW [IF EXISTS] 视图名1 [,视图名2]...

[RESTRICT | CASCADE]

声明了IF EXISTS,若视图不存在的话,也不会出现错误信息。也可以声明restrict和cascade,但它们没什么影响。

使用DROP VIEW一次可删除多个视图。例如:

DROP VIEW CS_KC, CS_XS;将删除视图CS_KC和CS_XS。

转载至http://blog.csdn.net/huangjianxiang1875/article/details/7882232

mysql求数据库平均成绩视图_MySQL数据库视图相关推荐

  1. 如何用C++从文件读取学生成绩再求出平均成绩送回文件中

    如何用C++从文件读取学生成绩再求出平均成绩送回文件中 楼主今天心血来潮,第一次发帖,请多多包涵. 数据库第一个实验的目的和内容如下: 一.实验目的 熟练的使用C语言或C++编写程序 二.实验内容 ( ...

  2. (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各

    定义一个描述学生基本情况的类Student,数据成员包括姓名.学号.英语成绩和高数成绩:成员函数包括构造函数.析构函数.获取姓名.获取学号.求出平均成绩,以及显示各科成绩和平均成绩的显示函数.编写ma ...

  3. 【C语言】平均分的战争。有m个人的成绩存放在score数组中,请编写程序求出平均成绩并且罗列出低于平均分的分数。

    [问题描述] 平均分的战争.有m个人的成绩存放在score数组中,请编写程序求出平均成绩并且罗列出低于平均分的分数. [输入形式]输入共两行: 第一行成绩个数N,N<=20 第二行,N个以空格分 ...

  4. C语言:编程题(在某次比赛中,有10个评委给选手打分。现要求编程:1)输入一位选手的10个成绩;2)去掉一个最高分,一个最低分,求出平均成绩;3)输出该选手的平均成绩,保留一位小数。

    具体如下: 编程题(在某次比赛中,有10个评委给选手打分.现要求编程:1)输入一位选手的10个成绩:2)去掉一个最高分,一个最低分,求出平均成绩:3)输出该选手的平均成绩,保留一位小数.(17分) 基 ...

  5. 查询mysql视图_MySQL数据库简介及常用命令

    MySQL简介: 1.MySQL发展史:MySQL是my ess que ell而不是myseqel.开发者是瑞典的MySQL AB公司的monty widenius,2008年被sun公司收购,09 ...

  6. mysql数据库视图_MySQL数据库8(二十)视图

    视图 视图概念 视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义 ...

  7. mysql数据库视图_MySQL数据库应用总结(九)—MySQL数据库视图的操作

    SQL语法预览: 创建视图:[create [or replace] [algorithm={undefined | merge | temptable}] view 视图名称(属性列) as sel ...

  8. mysql姓名相同成绩不同_MySQL数据库

    一.创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据: 2.查询学生总人数: 3.查询"生物"课程和"物理"课程成绩都及格的学生id和姓名: 4.查 ...

  9. mysql查询学生平均成绩及其名次_数据库面试题:数据库查询语句

    Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题 ...

  10. mysql数据库编程题题_mysql数据库编程题测试

    <mysql数据库编程题测试>由会员分享,可在线阅读,更多相关<mysql数据库编程题测试(3页珍藏版)>请在人人文库网上搜索. 1.1.自行创建测试数据2.查询"生 ...

最新文章

  1. sql 汉字转首字母拼音
  2. IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项
  3. 语义分析的一些方法(上篇)
  4. Android-----Activity生命周期
  5. macappstore登不上去_Mac 链接不上AppStore的解决方法
  6. Redis set集合结构及命令详解
  7. 迅雷精简版 4.0.0 Mac中文版
  8. java支付宝转账到银行卡_Java 支付宝支付,退款,单笔转账到支付宝账户(单笔转账到支付宝账户)...
  9. CSS漂亮搜索框代码
  10. legoloam系列算法之点云处理与特征提取
  11. 凸多边形最小面积包围矩形
  12. 解决网络专线未开放80端口的问题
  13. Eclipse开发工具的使用
  14. Redis连接池技术笔记小结 RedisPool
  15. Error:1045, Access denied for user 'root'@'localhost' (using password: YES) (Phon3.6+Mysql8.1 )
  16. javascript的字面量
  17. 在线获取美女写真壁纸采集源码
  18. 跟踪误差分析中的实际位置计算
  19. 自由职业,如何做好?
  20. 让网页更美观(css3新特性)

热门文章

  1. 黑客无孔不入!网络安全成五角大楼重中之重
  2. 【Python】Django CSRF问题
  3. R语言的cpp扩展支持Rcpp模块介绍
  4. response.setHeader各种使用方法
  5. iOS SDK:预览和打开文档
  6. zTree——删除所有节点
  7. 移动应用图标生成工具,一键生成所有尺寸的应用图标
  8. ajax调用微信退款接口,微信退款(在.net core 用http方式请求)
  9. linux中用c语言做一个游戏主播,当一个游戏主播需要做什么直播准备?
  10. python微软产品一般都一个25位的序列号_Python易错点6