前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL视图了解一下

MySQL视图了解一下

作者头像
布禾
发布2021-04-09 15:10:33
3050
发布2021-04-09 15:10:33
举报
简介

MySQL视图是一种虚拟的表,本身不包含任何数据,可以看作是对SQL查询的封装,它的数据都是动态执行SQL查询的结果。

MySQL视图常见应用主要有以下两种:

  1. 重用SQL语句,简化复杂SQL的操作。
  2. 保护数据,可以给用户授予表特定部分的访问权限,而不是整个表的访问权限。
视图的使用
创建视图

语法:CREATE VIEW <视图名> AS <SELECT语句>

代码语言:javascript
复制
CREATE VIEW student_class_view AS SELECT
	t.*, c.class_name
FROM
	tb_student t
LEFT JOIN tb_class c ON t.class_id = c.class_id;

如上创建了一个名为student_class_view的视图,它包含一个tb_student表和tb_class表的联结查询,现在我们就可以操作表一样操作student_class_view视图了:

代码语言:javascript
复制
SELECT * FROM student_class_view;

输出:

代码语言:javascript
复制
+----+------+-----+-------------+-----------+----------+------------+
| id | name | age | phone       | address   | class_id | class_name |
+----+------+-----+-------------+-----------+----------+------------+
|  1 | 小明 |  18 | 188xxxx1234 | xxxxxxxxx |        1 | IT2班      |
|  2 | 小米 |  28 | 188xxxx1234 | xxxxxxxxx |        2 | IT3班      |
|  3 | 小看 |  28 | 188xxxx1234 | xxxxxxxxx |        3 | IT1班      |
|  4 | 小阿 |  38 | 188xxxx1234 | xxxxxxxxx |        3 | IT1班      |
+----+------+-----+-------------+-----------+----------+------------+

CREATE VIEW完整语法:

代码语言:javascript
复制
CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
查看创建视图的语句

语法:SHOW CREATE VIEW <视图名>

代码语言:javascript
复制
SHOW CREATE VIEW student_class_view;

输出:

代码语言:javascript
复制
+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View               | Create View                                                                                                                                                                                                                                                                                                                                                                    | character_set_client | collation_connection |
+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| student_class_view | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `student_class_view` AS select `t`.`id` AS `id`,`t`.`name` AS `name`,`t`.`age` AS `age`,`t`.`phone` AS `phone`,`t`.`address` AS `address`,`t`.`class_id` AS `class_id`,`c`.`class_name` AS `class_name` from (`tb_student` `t` left join `tb_class` `c` on((`t`.`class_id` = `c`.`class_id`))) | utf8                 | utf8_general_ci      |
+--------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

Create View列为该视图的创建语句。

删除视图

语法:DROP VIEW <视图名>

代码语言:javascript
复制
DROP VIEW student_class_view;

再次查询该视图,视图已被删除:

代码语言:javascript
复制
[SQL]SELECT * FROM student_class_view;
[Err] 1146 - Table 'resource.student_class_view' doesn't exist

DROP VIEW完整语法:

代码语言:javascript
复制
DROP VIEW [IF EXISTS]
    view_name [, view_name] ...
    [RESTRICT | CASCADE]
修改视图定义

修改视图定义可以使用以下方式:

1.先DROP删除视图,然后重新使用CREATE VIEW创建视图。

2.使用CREATE OR REPLACE VIEW,如果原视图不存在,则会创建新的视图,如果原视图存在,则会替换原视图。

代码语言:javascript
复制
CREATE OR REPLACE VIEW student_class_view AS 
SELECT
...

3.使用ALTER VIEW,原视图必须要存在。

代码语言:javascript
复制
ALTER VIEW student_class_view AS 
SELECT
...

ALTER VIEW完整语法:

代码语言:javascript
复制
ALTER
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
视图的更新

更新视图是指对视图使用INSERT、UPDATE、DELETE语句,对视图的更新都是直接更新基础表的数据。

并非所有视图都能更新,如果MySQL不能确定要更新的基础数据,则不允许更新

如果视图定义中包含以下操作,则不允许更新:

  • 分组
  • 联结
  • 子查询
  • 聚集函数
  • DISTINCT
  • 导出(计算)列

更新视图的限制挺多,其实影响不大,因为MySQL视图主要用于数据查询,很少会直接更新视图。

参考:MySQL必知必会

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 视图的使用
    • 创建视图
      • 查看创建视图的语句
        • 删除视图
          • 修改视图定义
          • 视图的更新
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档