前言
MySQL 5权威指南[第3版] 的作者 Michael Kofler 在奥地利格拉茨技术大学获得计算机科学博士学位。此书是学习 MySQL 5 的推荐书籍,本人读习此书后,将书中的一些知识点摘取下来,便于后续学习以用。
第 8 章 数据库设计概论
8.10 视图
视图(view)使得人们可以为一个或多个数据表定义一个特殊的表现形式。视图在行为上与数据表没有什么区别——可以使用 select 查询命令去查询数据,还可以(但要取决于视图的具体定义)使用 insert、update 和 delete 命令修改数据。
创建和使用视图的基本原因:
- 安全。把可以访问的那些数据列创建为一个视图,然后通过设置 MySQL 访问权限让某些用户只能访问这个视图,但不能访问这个视图背后的数据表。
- 方便。在许多应用程序里,人们经常需要执行同样的查询去根据某种要求从一个或多个数据表里收集数据。
视图的定义
视图相当于一个虚拟的数据表,而这个虚拟数据表的内容是某个 select 查询命令的执行结果。
注意:必须具备 create view(创建视图)权限才能执行 create view 命令。
1. 在视图里修改数据记录
能不能在某个视图里使用 insert、update 和 delete 命令(或者说这个视图是不是可刷新的)要取决于当初用来定义这个视图的 select 命令。
可刷新的视图需要满足以下几个条件:
- 当初用来定义视图的 select 命令不得包含 group by、distinct、limit、union 或者 having 等子命令。
- 如果某个视图里的数据来自一个以上的数据表,那它几乎总是不可刷新的。
- 视图应该包含主键索引、唯一索引、外键约束条件所涉及的全部数据列。如果视图里没有或缺少这样的数据列,就将由 MySQL 选项 updateable_views_with_limit 来决定是允许刷新并同时返回一条警告消息(默认设置)、还是不允许刷新并触发一个错误(设置为 0)。
create view 命令语法:
CREATE [OR REPLACE] [ALGORITHM = UNDEFINED | MERGE | TEMPTABLE]
VIEW name [(columnlist)] AS select command
[WITH [CASCADED| LOCAL] CHECK OPTION]
对应选项解释:
- on replace:把一个现有视图替换为新视图,并且不返回出错消息。
- algorithm:新视图的内部表示形式。在默认的情况下,MySQL 总是把这个选项设置为 undefined(可以通过 show create table viewname 命令来查看)。
- with local option:只有当用来创建这个视图的 select 命令的 where 条件满足时才允许对这个视图里的记录进行修改。with check option 选项只在视图允许刷新的时候才起作用。
变形 with local check option 将影响从其他视图派生出来的视图(这是允许的)。local 的意思是只考虑本条 create view 命令的 where 条件,不考虑父级视图的 where 条件。
变形 with cascade check option 的含义刚好与 with local check option 相反:本视图以及所有父级视图的 where 条件都必须考虑。如果既没有给出 cascade、也没有给出 local,默认设置将是 cascade。
3. 查看视图的定义
SHOW CREATE VIEW name;
必须具备 create view(创建视图)权限才能执行 create view 命令。
![v2-6a0579d5e3d4efd84fb727f4abf9d9a0_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=f8976a84-1f2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-6a0579d5e3d4efd84fb727f4abf9d9a0_b.jpg)
4. 删除视图
DROP VIEW viewname