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;
相关推荐
明月56619 分钟前
Oracle 误删数据恢复
数据库·oracle
水瓶_bxt2 小时前
Centos安装HAProxy搭建Mysql高可用集群负载均衡
mysql·centos·负载均衡
♡喜欢做梦2 小时前
【MySQL】深入浅出事务:保证数据一致性的核心武器
数据库·mysql
遇见你的雩风2 小时前
MySQL的认识与基本操作
数据库·mysql
dblens 数据库管理和开发工具2 小时前
MySQL新增字段DDL:锁表全解析、避坑指南与实战案例
数据库·mysql·dblens·dblens mysql·数据库连接管理
weixin_419658312 小时前
MySQL的基础操作
数据库·mysql
不辉放弃3 小时前
ZooKeeper 是什么?
数据库·大数据开发
Goona_3 小时前
拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统
数据库·python·sql·excel·pyqt
Olrookie4 小时前
若依前后端分离版学习笔记(三)——表结构介绍
笔记·后端·mysql
程序员编程指南4 小时前
Qt 数据库连接池实现与管理
c语言·数据库·c++·qt·oracle