MySQL数据库-视图的介绍和使用

视图

1.视图的概念

视图:由数据库中一张表或多张表根据特定的条件查询出的数据构造成的虚拟表。

1.1 视图的作用
  • 安全性:如果我们直接将数据表授权给用户操作,则用户可以CRUD数据表中所有数,假如我们想要对数据表中的部分数据进行保护,可以将公开的数据,生成视图,授权用户访问视图。用户可以查询视图获取数据表中的公开数据,从而达到将数据表中的部分数据对用户隐藏;
  • 简单性:如果我们需要查询的数据来源多张表,可以使用多表连接查询。而视图的使用,可以让我们通过视图将这些连接查询结果对用户开放,用户则可以直接通过查询视图,获取多表数据,操作更加方便。

2 创建视图

2.1 语法
sql 复制代码
create view view_name 
AS
select _statement
2.2 视图案例

案例1

sql 复制代码
-- 创建视图:将学生表中性别为男的学生信息创建一张视图
CREATE VIEW view_stu_denger
AS
SELECT * from students where stu_denger = '男';

-- 查询视图
SELECT * from view_stu_denger;

案例2

sql 复制代码
-- 创建视图:查询学生借书的信息(学生名、图书名、借书数量)
CREATE VIEW view_stu_records
AS
select s.stu_name,b.book_name,r.borrow_num 
from 
students s INNER JOIN books b INNER JOIN records r 
ON 
s.stu_num = r.snum and b.book_id = r.bid;

-- 查询视图(视图的查询结果,学生表、图书表、借书表的联合查询结果的展示)
SELECT * from view_stu_records;
2.3 视图数据的特性

视图是虚拟表,查询视图的数据是来源于数据表的,当对视图进行操作时,对原数据中的数据是否有影响?

查询操作:

  • 如果在原数据表中新增数据,且满足视图的查询条件,通过查询视图,也可以查询出新增数的数据。
  • 如果在原数据表中删除数据,且满足视图的查询条件,通过查询视图,即查询不到已删除的数据。

新增数据

  • 如果在视图中添加数据,数据会被添加到原数据表
sql 复制代码
-- 在视图中新增数据
INSERT INTO view_stu_denger VALUES('1006','鲁班','男',18);

-- 查询视图
SELECT * from view_stu_denger;

-- 查询原表
SELECT * from students;

删除数据

  • 如果从视图删除数据,数据也将从原表中删除。
sql 复制代码
-- 删除数据
DELETE from view_stu_denger where stu_num = '1006';

-- 查询视图
SELECT * from view_stu_denger;

-- 查询原表
SELECT * from students;

修改数据

  • 如果在视图中修改数据,源数据表中的数据也将同步修改
sql 复制代码
-- 在视图中修改数据
UPDATE view_stu_denger set stu_age = 32 where stu_num = '1003';

-- 查询视图
SELECT * from view_stu_denger;

-- 查询原表
SELECT * from students;

注意: 对于多表查询,连接查询的视图,是不能进行增删改的操作!
**视图的使用建议:**对复杂查询简化操作,并且不会对数据进行修改的情况下可以使用视图。

3.对视图的操作

3.1查询视图结构
sql 复制代码
-- 查询视图结构
DESC view_stu_records;
3.2修改视图
sql 复制代码
-- 修改视图:方式1 REPLACE
CREATE OR REPLACE VIEW view_stu_denger
AS
SELECT * from students where stu_denger = '女';

-- 修改视图:方式2 ALTER
ALTER VIEW view_stu_denger
AS
SELECT * from students where stu_denger = '男';
3.3删除视图

删除数据表是,会删除全部数据,但是删除视图时,不会删除原表数据

sql 复制代码
-- 删除视图
DROP VIEW view_stu_denger;
相关推荐
Hrain-AI5 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
净水深流6 小时前
中央厨房冷链技术实践:多温区改造、WMS落地与IoT温控架构
大数据·数据库·人工智能·冷库冷链
l1t6 小时前
测试DuckDB 2.1的match_recognize模式匹配语句
数据库·duckdb
IpdataCloud7 小时前
AI智能体调用工具怎么核验来源IP?归属地、网络类型与代理风险识别(含Python代码)
数据库·python·tcp/ip
曹牧7 小时前
Java:SQL 注入漏洞
数据库
程序员JerrySUN8 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
oradh8 小时前
Oracle Undo问题总结(ORA-600 [4xxx] 系列错误)
数据库·oracle
达梦数据8 小时前
DMDRS辅助表生成规则与作用
数据库·oracle
‎ദ്ദിᵔ.˛.ᵔ₎9 小时前
MySQL 表约束
数据库·mysql
Doris__HE9 小时前
【元脑服务器NF5476G7-NF5476M7技术规格分享】
运维·服务器·网络·数据库·性能优化