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';使用的也是'';不是````;
- 单引号用于 字符串字面值。当你要表示字符串(比如查询中的条件、文本等)时,需要使用单引号来包裹。
- 反引号用来 引用标识符(如表名、列名、数据库名等)。当你使用的标识符与 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>
修改视图
- 使用replace,即创建view视图时候用到的ddl的SQL文,普通创建使用create,但是正常一般都会加上create or replace ,这样子更加稳妥;
- 使用alter语句
sql
alter view view_stu as select * from student;
更新视图
- 使用update语句
sql
UPDATE VIEW_NAME
SET VALUE1 = 1,
VALUE2 = 2,
VALUE3 = 3,
VALUE4 = 4;
- 使用insert语句
sql
INSERT INTO VIEW_NAME VALUES (1,2,3);
- 使用delete语句
sql
DELETE FORM VIEW_NAME WHERE condition (true/false)
删除视图
drop和删除是绑定的,视图也是使用drop删除;
sql
DROP VIEW IF EXISTS VIEW_NAME;