以下是上述文章的目录:
一、视图概述
- 视图的定义
二、基本使用
- 创建视图
- 查询视图
- 修改视图影响基表
- 查询验证
- 删除视图
三、视图规则和限制
- 命名规则
- 数量限制
- 索引和触发器
- 安全性
- ORDER BY规则
- 与表一起使用
四、实战案例
- 牛客实战OJ
- 修改基表影响视图
- 查询验证
- 删除视图
视图(Views)
视图是一个虚拟表,其内容由查询定义,可以像操作真实表一样对视图进行操作。
基本使用
创建视图
-- 创建视图v_ename_dname,包含EMP表的ename和DEPT表的dname
CREATE VIEW v_ename_dname AS
SELECT ename, dname
FROM EMP, DEPT
WHERE EMP.deptno = DEPT.deptno;
查询视图
-- 查询视图v_ename_dname,并按dname排序
SELECT * FROM v_ename_dname ORDER BY dname;
修改视图影响基表
-- 更新视图v_ename_dname中ename为'TEST',影响EMP表中的数据
UPDATE v_ename_dname SET ename = 'TEST' WHERE ename = 'CLARK';
查询验证
-- 查询EMP表,验证ename是否被更新为'TEST'
SELECT * FROM EMP WHERE ename = 'TEST';
删除视图
-- 删除视图v_ename_dname
DROP VIEW v_ename_dname;
视图规则和限制
- 命名规则:与表一样,视图名必须唯一,不能与现有视图或表名重复。
- 数量限制:创建视图的数量没有限制,但复杂查询作为视图可能会影响性能。
- 索引和触发器:视图不能添加索引,也不能有关联的触发器或默认值。
- 安全性:视图可以提高安全性,但必须具有足够的访问权限。
- ORDER BY 规则:视图中可以使用
ORDER BY
,但如果从视图检索数据的SELECT
语句中也包含ORDER BY
,则视图中的ORDER BY
将被覆盖。 - 与表一起使用:视图可以和表一起使用。
实战案例
牛客实战OJ
针对actor
表创建视图actor_name_view
:
-- 假设actor表结构如下:
-- CREATE TABLE actor (
-- actor_id INT PRIMARY KEY,
-- actor_name VARCHAR(100)
-- );-- 创建视图actor_name_view,包含actor_name
CREATE VIEW actor_name_view AS
SELECT actor_name
FROM actor;
修改基表影响视图
-- 修改EMP表deptno为10,影响视图v_ename_dname中的数据
UPDATE EMP SET deptno = 10 WHERE ename = 'JAMES';
查询验证
-- 查询视图v_ename_dname,验证ename是否为'JAMES'且dname是否变化
SELECT * FROM v_ename_dname WHERE ename = 'JAMES';
删除视图
-- 删除视图actor_name_view
DROP VIEW actor_name_view;
以上笔记包含了视图的基本使用、规则限制以及实战案例,方便快速理解和应用视图。