MySQL数据库视图

什么是视图?

视图在数据库中作为一个对象存储,视图一经定义以后,就可以像表一样被查询、修改、删除和更新。

视图就是一张不存在的表(没有实体),但是可以把视图作为表来执行增删查改操作。

使用视图的优点?

  • 为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理
  • 屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用
  • 简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性
  • 便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次
  • 可以重新组织数据以便输出到其他应用程序中

创建视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }]
VIEW 视图名 [(列名 … )]
AS SELECT语句
[WITH [CASCADED | LOCAL] CHECK OPTION];

例如:create view v_stu as
select stu_id,stu_name,grade from students where grade > 100;

PS:
检查条件 with […] check option,默认使用CASCADED
**检查条件的作用:**以上我们可以知道对于视图可以像表一样进行CRUD操作,而往往视图是某种条件下的表查询结果,检查条件就是在更新/插入数据时对数据进行检查,不满足条件则不允许更新/插入。(比如上述例子中,视图是student表中grade>100的学生部分信息,如果向视图中插入数据(123,‘张三’,50)是不能成功插入的)。
CASCADED|LOCAL的区别:在MySQL中可以根据视图创建视图。CASCADED(级联的):使用此视图创建的视图一样要满足检查条件。LOCAL:使用此视图创建的视图不继承此视图的检查条件。

删除视图

DROP VIEW [IF EXISTS]
view_name [, view_name] …
[RESTRICT | CASCADE];

RESTRICT: 确保只有不存在相关视图和 完整性约束的表才能删除
CASCADE: 任何相关视图和完整性约束一并被删除

PS:一般只用drop view 视图名;即可。

不可更新视图

如果视图包含下述结构中的一种,则视图不可更新
(1)聚合函数;(2)DISTINCT关键字;(3)GROUP BY子句;
(4)ORDER BY子句;(5)HAVING子句;(6)UNION运算符;
(7)位于选择列表中的子查询;(8)FROM子句中包含多个表;
(9)SELECT语句中引用了不可更新视图;
(10)WHERE子句中的子查询,引用FROM子句中的表;

猜你喜欢

转载自blog.csdn.net/weixin_43823363/article/details/86753267