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;
相关推荐
星星点点洲23 分钟前
【缓存与数据库结合最终方案】伪从技术
数据库·缓存
小黑屋的黑小子25 分钟前
【MySQL】MySQL索引与事务
数据库·mysql·oracle
OK_boom3 小时前
Dapper的数据库操作备忘
数据库
艺杯羹3 小时前
JDBC之ORM思想及SQL注入
数据库·sql·jdbc·orm·sql注入
blackA_4 小时前
数据库MySQL学习——day4(更多查询操作与更新数据)
数据库·学习·mysql
极限实验室5 小时前
Easysearch 迁移数据之 Reindex From Remote
数据库
朴拙数科5 小时前
基于LangChain与Neo4j构建企业关系图谱的金融风控实施方案,结合工商数据、供应链记录及舆情数据,实现隐性关联识别与动态风险评估
数据库·langchain·neo4j
小李学不完6 小时前
Oracle--SQL事务操作与管理流程
数据库
qq_441996056 小时前
为何 RAG 向量存储应优先考虑 PostgreSQL + pgvector 而非 MySQL?
数据库·mysql·postgresql
Ivan陈哈哈6 小时前
Redis是单线程的,如何提高多核CPU的利用率?
数据库·redis·缓存