【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;
相关推荐
spencer_tseng1 小时前
MySQL my.cnf
mysql
星空露珠1 小时前
lua获取随机颜色rgb转换hex
数据结构·数据库·算法·游戏·lua
专注VB编程开发20年1 小时前
VB.NET多线程处理每个Web请求,ThreadPool.QueueUserWorkItem要求是object
数据库·vb.net·webserver
TracyCoder1231 小时前
Redis与MySQL数据不一致:核心场景与解决方案
数据库·redis·mysql
南棱笑笑生1 小时前
20251202给荣品RD-RK3588-MID开发板的Android13启用黑夜模式
数据库
2501_939909051 小时前
MySQL 数据库管理
数据库·mysql
山水无间道1 小时前
redis的rdb文件迁移
数据库·redis·缓存
陈文锦丫1 小时前
Redis原理篇
数据库·redis·缓存
xuanloyer1 小时前
oracle从入门到精通--oracle基础
数据库·oracle