设为首页 加入收藏

TOP

MySQL优化之――视图(二)
2015-07-24 11:53:58 来源: 作者: 【 】 浏览:10
Tags:MySQL 优化 视图
数据库中的视图的信息

通过对VIEWS表的查询可以查看数据库中所有视图的详细信息

SELECT * FROM `information_schema`.`VIEWS`

TABLE_CATALOG  TABLE_SCHEMA  TABLE_NAME  VIEW_DEFINITION                                                                                                                                                                                                                         CHECK_OPTION  IS_UPDATABLE  DEFINER         SECURITY_TYPE  CHARACTER_SET_CLIENT  COLLATION_CONNECTION
-------------  ------------  ----------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  ------------  ------------  --------------  -------------  --------------------  --------------------
def            school        stu_class   select `school`.`student`.`stuno` AS `id`,`school`.`student`.`stuname` AS `name`,`school`.`stuinfo`.`class` AS `class` from `school`.`student` join `school`.`stuinfo` where (`school`.`student`.`stuno` = `school`.`stuinfo`.`stuno`)  NONE          YES           root@localhost  DEFINER        utf8                  utf8_general_ci     

当前实例下只有一个视图stu_class

\


修改视图

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

MYSQL中通过CREATE OR REPLACE VIEW 语句和ALTER语句来修改视图

语法如下:

?

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

?

该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。当视图不存在时创建,存在时进行修改

修改视图

?

DELIMITER $$

CREATE OR REPLACE VIEW `stu_class` AS 
SELECT
  `student`.`stuno`   AS `id`
FROM (`student` JOIN `stuinfo`)
WHERE (`student`.`stuno` = `stuinfo`.`stuno`)$$

DELIMITER ; 

?

通过DESC来查看更改之后的视图定义

?

DESC stu_class

?

\

可以看到只查询一个字段

ALTER语句修改视图

?

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

?

这里关键字跟前面的一样,这里不做介绍

使用ALTER语句修改视图 stu_class

?

ALTER VIEW  stu_class AS SELECT stuno FROM student;

?

使用DESC查看

?

DESC stu_class

?

\

\


更新视图

更新视图是指通过视图来插入、更新、删除表数据,因为视图是虚表,其中没有数据。

通过视图更新的时候都是转到基表进行更新,如果对视图增加或者删除记录,实际上是对基表增加或删除记录

我们先修改一下视图定义

?

ALTER VIEW  stu_class AS SELECT stuno,stuname FROM student;

?

查询视图数据

\

UPDATE

?

UPDATE stu_class SET stuname='xiaofang' WHERE stuno=2

?

查询视图数据

\

更新成功

INSERT

?

INSERT INTO stu_class VALUES(6,'haojie')

?

\

插入成功

?

DELETE

 
 
DELETE FROM stu_class WHERE stuno=1

\

删除成功

当视图中包含如下内容的时候,视图的更新操作将不能被执行

(1)视图中包含基本中被定义为非空的列

(2)定义视图的SELECT语句后的字段列表中使用了数学表达式

(3)定义视图的SELECT语句后的字段列表中使用聚合函数

(4)定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句

?


删除视图

删除视图使用DROP VIEW语法

?

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

?

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

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

删除stu_class视图

?

DROP VIEW IF EXISTS stu_class 

?

如果名称为 stu_class 的视图存在则删除

使用SHOW CREATE VIEW语句查看结果

SHOW CREATE VIEW stu_class 
Query: -- update stu_class set stuname='xiaofang' where stuno=2; -- delete from stu_class where stuno=1 -- select * from stu_class; -- ... Error Code: 1146 Table 'school.stu_class' doesn't exist Execution Time : 0 sec Transfer Time : 0 sec Total Time : 0.004 sec ---------------------------------------------------

该视图不存在,删除成功

?


总结

SQLSERVER里实际上跟MYSQL一样,也是有信息架构视图的

信息架构视图 (Transact-SQL)

信息架构视图是 SQL Server 提供的几种获取元数据的方法之一。

信息架构视图提供独立于系统表的内部 SQL Server 元数据视图。

尽管已经对基础系统表进行了重要的修改,信息架构视图仍然可使应用程序正常工作。

SQL Server 中包含的信息架构视图符合 ISO 标准中的信息架构定义。

信息架构视图的数据是存放在系

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇nodemysql部分中文文档 下一篇(3)mysql优化之sql语句优化

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)