MySQL进阶学习三(视图)

一、什么是视图

视图是基于一个或多个表的查询结果构建的虚拟表 ,本身不存储数据 (除非物化视图),只保存查询定义。

  • 虚拟表:使用时才执行底层 SQL
  • 不占数据空间:只存定义(普通视图)
  • 简化查询:把复杂 SQL 封装成"表"
  • 安全控制:只暴露部分列/行

二、创建视图语法

  1. OR REPLACE(存在则替换)等价于"存在先删再建",但不报错。
sql 复制代码
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW 视图名 [(列名1, 列名2, ...)]
    AS
    SELECT 语句
    [WITH [CASCADED | LOCAL] CHECK OPTION];

1. 基本创建

sql 复制代码
CREATE VIEW v_employee AS
SELECT id, name, dept_id, salary
FROM employee
WHERE status = 1;

2. 指定列名

sql 复制代码
CREATE VIEW v_emp (emp_id, emp_name, dept, sal) AS
SELECT id, name, dept_id, salary
FROM employee;

不指定列名时,默认用 SELECT 的列名/别名。

三、查看视图

sql 复制代码
-- 查看所有视图
SHOW FULL TABLES WHERE TABLE_TYPE = 'VIEW';

-- 查看视图定义
SHOW CREATE VIEW v_employee;

-- 查看视图结构
DESC v_employee;

-- 信息模式查询
SELECT * FROM information_schema.VIEWS
WHERE TABLE_NAME = 'v_employee';

四、使用视图

视图使用方式和表一样:

sql 复制代码
-- 查询
SELECT * FROM v_employee WHERE salary > 10000;

-- 聚合
SELECT dept_id, COUNT(*) FROM v_emp_dept GROUP BY dept_id;

-- 连接
SELECT * FROM v_employee e JOIN department d ON e.dept_id = d.id;

-- 排序分页
SELECT * FROM v_employee ORDER BY salary DESC LIMIT 10;

五、修改视图

方式 1:CREATE OR REPLACE

sql 复制代码
CREATE OR REPLACE VIEW v_employee AS
SELECT id, name, salary FROM employee WHERE status = 1;

方式 2:ALTER VIEW

sql 复制代码
ALTER VIEW v_employee AS
SELECT id, name, dept_id, salary FROM employee WHERE status = 1;

两者等价,ALTER VIEW 更语义化。

六、删除视图

sql 复制代码
DROP VIEW [if exists] v_employee;

-- 多个
DROP VIEW v1, v2, v3;

-- 存在才删(避免报错)
DROP VIEW IF EXISTS v_employee;
相关推荐
lusklusklusk5 分钟前
SQL Server 为什么普通 SELECT 会阻塞 UPDATE?——行级 S 锁到表级 S 锁的锁升级原理与实验验证
数据库·mysql·oracle
软件技术NINI1 小时前
基于SpringBoot和Vue的摇滚乐鉴赏网站
vue.js·spring boot·后端·spring·html·毕业设计·毕设
程序员塔塔喵1 小时前
【MySQL篇|第十而二篇】深层次讲解MVCC机制
mysql·mvcc
Tsuki_tl1 小时前
【总结】Redis五大数据类型应用场景及基本命令
数据库·redis·后端·缓存·缓存中间件·redis命令·redis 五大数据类型
后台模板学习1 小时前
Go Web开发中任务调度框架的源码解析与高可用实现方案
开发语言·后端·golang
系统集成-鹰翔1 小时前
ERP对接升级提示数据库迁移失败:SQLite逐版本事务到底回滚到哪一步
javascript·数据库·经验分享·后端
IT_陈寒1 小时前
深入理解SpringBoot:核心原理与最佳实践
前端·人工智能·后端
一技安身1 小时前
MySQL 8.4.13 LTS 通用二进制包(Linux免安装版)完整教程
linux·mysql·adb
学长毕设1 小时前
基于SpringBoot的校园礼服租赁系统的设计与实现
java·spring boot·后端
代码派1 小时前
业务不停机迁移 MySQL 到 TiDB,NineData 数据增量同步实操演示
数据库·mysql·tidb·ninedata·无停机迁移·增量迁移·全量迁移