Mysql 视图

0 引言

数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表,并且在引用视图时动态生成。

视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。视图还可以从已经存在的视图的基础上定义。

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化也可以自动反映到视图中。

视图的作用

1.简单化

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化它们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2.安全性

通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:(1)使用权限可被限制在基表的行的子集上。(2)使用权限可被限制在基表的列的子集上。(3)使用权限可被限制在基表的行和列的子集上。(4)使用权限可被限制在多个基表的连接所限定的行上。(5)使用权限可被限制在基表中的数据的统计汇总上。(6)使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

  1. 逻辑数据独立性

视图可帮助用户屏蔽真实表结构变化带来的影响。

1 创建视图

创建MySQL视图的语法如下:

复制代码
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

2 查看视图

查看视图是查看数据库中已存在的视图的定义。查看视图必须要有SHOW VIEW的权限,查看视图的方法包括DESCRIBE、SHOW TABLE STATUS和SHOW CREATE VIEW。

2.1 使用DESCRIBE语句查看视图基本信息

复制代码
  DESCRIBE 视图名;

2.2 使用SHOW TABLE STATUS语句查看视图基本信息

复制代码
  SHOW TABLE STATUS LIKE '视图名';

    SHOW TABLE STATUS WHERE Name = 'view_name';

2.3 SHOW CREATE VIEW:

复制代码
SHOW CREATE VIEW view_name;

3 修改视图

复制代码
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

4 更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。更新的3种方法:INSERT、UPDATE和DELETE。

将视图作为一张普通表一样去更新,会更新到基础表

UPDATE

复制代码
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

DELETE

INSERT

当视图中包含有如下内容时,视图的更新操作将不能被执行:(1)视图中不包含基表中被定义为非空的列。(2)在定义视图的SELECT语句后的字段列表中使用了数学表达式。(3)在定义视图的SELECT语句后的字段列表中使用聚合函数。(4)在定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING子句。

5 删除视图

复制代码
  DROP VIEW IF EXISTS view_name;
相关推荐
小陈工35 分钟前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
0xDevNull5 小时前
MySQL数据冷热分离详解
后端·mysql
科技小花5 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸5 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain5 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希6 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神6 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员6 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java6 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿6 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb