
MySQL[笔记][视图]
复杂查询的一致性:当多个地方需要使用相同的复杂查询时,通过创建视图可以减少代码重复。 简化查询:对于复杂的跨表查询,可以通过创建视图来简化 SQL 语句,使其更易于理解和维护。 灵活性:视图允许对数据的动态过滤和聚合,适合支持多种业务需求的场景。
发布日期:2021-05-19 18:19:23
浏览次数:21
分类:精选文章
本文共 3094 字,大约阅读时间需要 10 分钟。
MySQL 视图(View)详细指南
MySQL 视图是一种非常强大的工具,可以用于提高数据查询效率,统一数据访问入口。本文将详细介绍视图的创建、修改、删除以及实际应用案例。
什么是视图?
视图是基于现有表的逻辑视结果集的对象。与普通表不同,视图并不在物理存储中保存数据,而是通过执行存储的 SQL 语句来生成数据。因此,视图可以被视为是一种动态的、基于查询逻辑的虚拟表。
以下是视图的几个典型用途:
一、创建视图
通过以下步骤可以创建视图:
基本语法:
CREATE VIEW view_name AS SELECT ... FROM table_name;
例如,可以创建一个包含部分数据的视图:
CREATE VIEW departments_viewer AS SELECT department_id, department_name FROM departments;
使用具体案例
案例 1:查询包含’я’的员工信息
CREATE VIEW employees_viewer AS SELECT last_name, department_name, job_title FROM employeesJOIN departments ON departments.department_id = employees.department_idWHERE last_name LIKE '%亚';
查询指定部门的平均工资
CREATE VIEW salary_avg_viewer AS SELECT AVG(salary) average_salary FROM employeesGROUP BY department_id;
结合多个表的复杂查询
CREATE VIEW customers_order_viewer AS SELECT customer_name, order_amount, order_date FROM customersJOIN orders ON customers.customer_id = orders.customer_idWHERE order_amount > 1000;
二、修改视图
当需要修改现有视图时,可以使用以下方法:
替换整个视图:
CREATE OR REPLACE VIEW view_name AS SELECT ... FROM table_name;
例如:
CREATE OR REPLACE VIEW salary_avg_viewer AS SELECT AVG(salary) FROM employees GROUP BY department_id;
仅修改部分字段:
ALTER VIEW view_name AS SELECT ... FROM table_name;
例如:
ALTER VIEW departments_viewer AS SELECT department_name, number_of_employees FROM departments;
删除视图:
DROP VIEW view_name;
例如:
DROP VIEW departments_viewer;
三、查看视图信息
可以通过以下方式查看视图的详细信息:
使用 DESC
命令:
DESC view_name;
查看视图的创建语句:
SHOW CREATE VIEW view_name;
四、视图的实际应用
以下是视图在实际项目中的几种常见应用场景:
案例 1:查询特定电话区码的员工信息
创建视图 emp_v1
以查询电话号码以“011”开头的员工信息:
CREATE OR REPLACE VIEW emp_v1 AS SELECT last_name, salary, email FROM employeesWHERE phone_number LIKE '011%';
案例 2:查询部门的最高工资
创建视图 dept_salary_v2
以计算每个部门的最高工资:
CREATE OR REPLACE VIEW dept_salary_v2 AS SELECT MAX(salary) AS max_salary, department_id FROM employeesGROUP BY department_id HAVING max_salary > 12000;
案例 3:更新视图中的数据
आप可以通过以下方式对视图中的数据进行插入、修改和删除操作:
插入新数据:
INSERT INTO emp_v1 VALUES('张飞', 'ZF@QQ.COM', 100000);
更新数据:
UPDATE emp_v1 SET last_name = '张无忌' WHERE last_name = '张飞';
删除数据:
DELETE FROM emp_v1 WHERE last_name = '张无忌';
五、注意事项
不允许更新的视图: 如果视图包含以下关键字,则不能对其进行更新操作:
GROUP BY
、DISTINCT
、HAVING
、UNION
等聚合函数- 约束条件中的子查询
- 使用
JOIN
keyword 时引用了一个不能更新的表
例如:
CREATE OR REPLACE VIEW myv6 AS SELECT last_name, email, salary FROM employeesWHERE employee_id IN(SELECT manager_id FROM employees WHERE manager_id IS NOT NULL);
常量视图: 如果需要频繁查询某个固定值,可以通过视图实现:
CREATE OR REPLACE VIEW const_view AS SELECT 'جارð' AS name;
六、实战示例:书籍管理系统
假设有一个名为 book
的表,包含以下字段:
bid
(主键)bname
(书名)price
(价格)btypeid
(类型 ID,外键指向bookType
表)
插入一行数据并提交事务:
SET autocommit = 0;INSERT INTO book(bid, bname, price, btypeid) VALUES(1, '小李飞刀', 100, 1);COMMIT;
创建一个查询价格大于100的书名和类型的视图:
CREATE VIEW myv1 AS SELECT bname, btype_name FROM book bINNER JOIN bookType t ON b.btypeid = t.id WHERE price > 100;
修改视图以支持价格范围查询:
CREATE OR REPLACE VIEW myv2 AS SELECT bname, price FROM book WHERE price BETWEEN 90 AND 120;
删除视图:
DROP VIEW myv1;
通过本文的步骤和示例,你可以方便地掌握MySQL视图的使用方法,并将其成功应用于实际项目中。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月26日 03时05分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
查找最小值栈的O(1)
2019-03-15
淘宝天猫双十一养猫组队怎么踢人
2019-03-15
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
2019-03-15
概念唱片Plastic Beach封面高清壁纸
2019-03-15
旅游后期效果Ography Lightroom预设
2019-03-15
vue项目报错集合
2019-03-15
图片链接
2019-03-15
LINUX-WIFI无线接入的一些东西
2019-03-15
word文档手写字母总会大写问题
2019-03-15
Redis中的key
2019-03-15
juc-09-控制并发流程工具类
2019-03-15
第一节 docker安装
2019-03-15
Linux系统时间与硬件时间及时间同步
2019-03-15
Spring 和 DI 依赖注入
2019-03-15
中序线索二叉树的遍历
2019-03-15
laravel server error 服务器内部错误
2019-03-15
Linux驱动实现GPIO模拟I2C读写操作
2019-03-15
iJ配置Maven环境详解
2019-03-15
仿QQ登陆界面
2019-03-15