【MySQL】06 视图 view

view概述

视图,在数据库称之为view,是一种虚拟存在的表,并且表的结构和数据 都依赖于基本表。

通过视图不仅可以看到放在基础表中的数据,并且可以跟操作基础一样进行操作视图;

表 table、 视图 view、同义词 SYNONYM ,是关系型数据库的三大数据结构模式;

在MySQL中没有多个Schema,只有DataBase,DataBase就是Schema;

在MySQL中也没有 SYNONYM,用的时候直接指定数据库名称.表名称;

视图的作用:

  • 简化查询语句,直接查询视图就可以,在创建视图时候关联的表和条件已经完成;
  • 视图用户只可以查看和修改 他们所能见到的数据,一定程度上保证了安全性;
  • 可以屏蔽真实表所带来的影响,直接操作视图可以反映到基本表中;

视图管理

创建视图

创建一个简单视图

sql 复制代码
CREATE OR REPLACE VIEW student_v AS
 (
	SELECT
		* 
	FROM
		student
	);

DDL SQL文;

sql 复制代码
CREATE ALGORITHM = UNDEFINED DEFINER = `root` @`localhost` SQL SECURITY DEFINER VIEW `student_v` AS SELECT
`student`.`id` AS `id`,
`student`.`name` AS `name`,
`student`.`grade` AS `grade`,
`student`.`gid` AS `gid` 
FROM
	`student`

大多时候是这样的,会有一个条件,限制访问数据的权限,会再加上一些join多表一起

sql 复制代码
CREATE VIEW manager_view AS
SELECT id, name, salary
FROM employees
WHERE position = 'Manager';

查看视图

查看view的字段信息,DESCRIBE >> DESC VIEW_NAME

sql 复制代码
mysql> DESC student_v;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int          | YES  |     | NULL    |       |
| name  | varchar(255) | YES  |     | NULL    |       |
| grade | float        | YES  |     | NULL    |       |
| gid   | int          | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

mysql>

查看view的基本信息,SHOW TABLE STATUS LIKE VIEW_NAME

sql 复制代码
mysql> SHOW TABLES LIKE 'student_v';
+-----------------------------+
| Tables_in_db_02 (student_v) |
+-----------------------------+
| student_v                   |
+-----------------------------+
1 row in set (0.03 sec)

mysql> SHOW TABLE STATUS LIKE `student_v`;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`student_v`' at line 1
mysql> SHOW TABLE STATUS LIKE 'student_v';
+-----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------+----------+----------------+---------+
| Name      | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+-----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------+----------+----------------+---------+
| student_v | NULL   | NULL    | NULL       | NULL | NULL           | NULL        | NULL            | NULL         | NULL      | NULL           | 2025-11-26 22:48:24 | NULL        | NULL       | NULL      | NULL     | NULL           | VIEW    |
+-----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------+----------+----------------+---------+
1 row in set (0.03 sec)

mysql>

这个地方有点意思,使用show tables like 'student_v';使用的是''show table status like 'student_v';使用的也是'';不是````;

  1. 单引号用于 字符串字面值。当你要表示字符串(比如查询中的条件、文本等)时,需要使用单引号来包裹。
  2. 反引号用来 引用标识符(如表名、列名、数据库名等)。当你使用的标识符与 MySQL 的保留字冲突,或者包含特殊字符(如空格、破折号等)时,需要用反引号将它们括起来。

查看view的建表文,SHOW CREATE VIEW VIEW_NAME

sql 复制代码
mysql> SHOW CREATE VIEW student_v;
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View      | Create View                                                                                                                                                                                                                  | character_set_client | collation_connection |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| student_v | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `student_v` AS select `student`.`id` AS `id`,`student`.`name` AS `name`,`student`.`grade` AS `grade`,`student`.`gid` AS `gid` from `student` | utf8mb4              | utf8mb4_0900_ai_ci   |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.03 sec)

mysql> 

修改视图

  1. 使用replace,即创建view视图时候用到的ddl的SQL文,普通创建使用create,但是正常一般都会加上create or replace ,这样子更加稳妥;
  2. 使用alter语句
sql 复制代码
alter view view_stu as select * from student;

更新视图

  1. 使用update语句
sql 复制代码
UPDATE VIEW_NAME 
  SET VALUE1 = 1, 
      VALUE2 = 2,
      VALUE3 = 3,
      VALUE4 = 4;
  1. 使用insert语句
sql 复制代码
INSERT INTO VIEW_NAME VALUES (1,2,3);
  1. 使用delete语句
sql 复制代码
DELETE FORM VIEW_NAME WHERE condition (true/false)

删除视图

drop和删除是绑定的,视图也是使用drop删除;

sql 复制代码
DROP VIEW IF EXISTS VIEW_NAME;
相关推荐
岁岁种桃花儿5 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
jiunian_cn7 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐7 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
Exquisite.8 小时前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手8 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念9 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶10 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok10 小时前
MySQL的常用数据类型
数据库·mysql
曹牧11 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty11 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存