MySQl心得4--5--数据库视图(二)

2014-11-24 09:39:25 · 作者: · 浏览: 1
出,创建视图可以向最终用户隐藏复杂的表连接,简化了用户的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。
作者 tianyazaiheruan