视图:数据库里的"照骗"(虚拟表格)
嘿,朋友!想象一下你有个装满数据的Excel大表格(数据库表)。视图是啥?它就像你给这个表格拍的一张"照骗"!
视图的四大特点(照骗的本质):
- 不占内存:它本身不存数据,就像照片不占你手机内存一样
- 实时美颜:每次你看视图,它都实时从原表取数据,保证最新鲜
- 一键滤镜:把复杂的查询逻辑封装成简单操作,就像美颜APP
- 隐私保护:只展示想让人看的部分,敏感数据?打码!
为啥要用这个"照骗"?
- 懒人福音:不用每次都写又臭又长的SQL
- 安全第一:敏感字段?藏起来!只给看能看的
- 逻辑打包:把业务逻辑打包成视图,维护起来so easy
3.1 创建视图:给你的数据拍张"艺术照"
拍照(创建视图)的基本姿势:
CREATE [OR REPLACE] VIEW 视图名称
AS
SELECT 字段1, 字段2, ...
FROM 表名
WHERE 条件;
拍照参数详解(选美比赛规则):
OR REPLACE:如果已经有同款照片,直接覆盖(更新定义)FORCE:就算原表不存在,也要强行拍照(视图先创建,表后补)WITH CHECK OPTION:通过视图改数据?只能改照片里能看到的部分WITH READ ONLY:这张照片只能看,不能P图(只读)
1. 简单视图:单表"证件照"
例子:给部门30的员工拍张集体照
-- 先给摄影师(scott用户)发工作证
ALTER USER scott ACCOUNT UNLOCK;
ALTER USER scott IDENTIFIED BY tiger;
GRANT CREATE VIEW TO scott;
-- 开始拍照!
CREATE VIEW emp_view1
AS
SELECT empno, ename, sal
FROM emp
WHERE deptno = 30;
-- 欣赏作品(就像查普通表一样)
SELECT * FROM emp_view1;
效果:这张"集体照"只显示部门30的员工编号、姓名和工资,其他部门的同事?对不起,没入镜!
2. 复杂视图:多表"婚纱照"或"美颜照"
例子1:带美颜效果的视图(工资上调15%)
CREATE VIEW emp_view2
AS
SELECT empno, ename, sal * 1.15 AS new_sal
FROM emp
WHERE sal * 1.15 > 2000;
注意:如果给字段做了"美颜"(比如sal*1.15),必须给它起个艺名(这里用了AS new_sal)。
例子2:多表"婚纱照"(员工表和部门表牵手成功)
CREATE VIEW emp_view3
AS
SELECT e.empno, e.ename, e.sal, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
这张"婚纱照"把员工表和部门表关联起来,直接显示员工在哪个部门上班,不用再查来查去!
3.2 通过视图操作数据:给"照骗"P图?
视图不仅可以看,还能通过它来增删改原表数据,但注意:不是所有"照骗"都能随便P!
哪些地方能P图?
- 简单视图(单表无美颜)的所有地方通常都能P
- 复杂视图中,美颜过的地方不能P(比如上面
new_sal,P了会失真) - 多表视图中,只能P主表的部分(
FROM后面第一个表是主角)
怎么知道哪里能P?
SELECT column_name, insertable, updatable, deletable
FROM user_updatable_columns
WHERE table_name = UPPER('emp_view2');
运行后告诉你每个地方能不能P图(增删改)。
通过视图P图(插入数据)的例子:
-- 尝试完整P图(可能失败,因为new_sal是美颜效果,不能直接P)
INSERT INTO emp_view2(empno, ename, job, deptno)
VALUES(7459, 'Eric', 'Clerk', 20);
-- 只P能P的地方(成功!)
INSERT INTO emp_view2(empno, ename)
VALUES(7459, 'Eric');
-- 看看原图(原表)是不是真的被P了
SELECT * FROM emp WHERE empno = '7459';
重要提醒(P图须知):
- 通过视图P图时,没填的地方会变成
NULL(空白) - 如果原图要求某个地方必须有内容(
NOT NULL),而你没填,P图就会失败
3.3 修改和删除视图:重拍 or 删照片
重拍照片(修改视图):直接用CREATE OR REPLACE VIEW重新定义
CREATE OR REPLACE VIEW emp_view1
AS
SELECT empno, ename, sal, hiredate -- 新增了入职日期,换个角度拍
FROM emp
WHERE deptno = 30;
删除照片:简单粗暴,一句话
DROP VIEW emp_view1;
总结一下(敲黑板!)
- 视图是啥:数据库的"照骗",不存数据,只存拍照姿势(查询逻辑)
- 为啥拍:省事、安全、好维护(懒人+强迫症福音)
- 怎么拍:用
CREATE VIEW,可以单拍、合拍、加美颜 - 怎么用:像看真图一样看,部分还能P图(增删改)
- 注意事项:美颜过的地方不能P,合拍只能P主角
终极小技巧:当你发现某个复杂查询经常要用时——别犹豫!给它拍张"照骗"(做成视图),以后想看就看,想P就P(如果能P的话)!
最后一句:视图就像朋友圈照片——看着美好,背后可能是一堆复杂的查询逻辑。但谁在乎呢?好用就行!
本文深入讲解了数据库视图的概念,包括视图的创建、查询、修改和删除等操作,以及如何进行视图的DML操作。同时,文章还提供了创建简单和复杂视图的实例,以及如何检查视图字段是否支持DML操作的方法。

4822

被折叠的 条评论
为什么被折叠?



