视图、序列、同义词
掌握视图的创建与使用场景
理解序列的原理与操作
了解同义词的作用
核心讲解
(1)视图 View
虚拟的表,本身不存数据,是一条 SELECT 语句的封装。
作用:简化复杂查询、权限控制、数据安全、兼容接口
创建:
CREATE VIEW 视图名 AS SELECT语句;使用:和普通表一样查询
普通视图不支持直接修改(可以建可更新视图)
物化视图:真实存储数据,定期刷新,性能好
(2)序列 Sequence
数据库里的自增计数器,serial 本质就是序列。
独立于表,一个序列可以多个表用
操作:
创建:
CREATE SEQUENCE 序列名;下一个值:
nextval('序列名')当前值:
currval('序列名')
(3)同义词 Synonym
给数据库对象起别名,简化访问、切换对象不用改代码。
创建:
CREATE SYNONYM 别名 FOR 对象名;适用于长名字、跨模式访问
代码示例
-- ===== 视图 =====
-- 创建学生班级视图,关联查询
CREATE VIEW v_student_class AS
SELECT
s.id,
s.name,
s.age,
c.class_name,
c.teacher
FROM student s
JOIN class c ON s.class_id = c.id;
-- 查询视图,和表一样用
SELECT * FROM v_student_class WHERE class_name = '一班';
-- 删除视图
-- DROP VIEW v_student_class;
-- ===== 序列 =====
-- 创建自定义序列
CREATE SEQUENCE order_no_seq
START WITH 1000 -- 从1000开始
INCREMENT BY 1 -- 每次加1
NO CYCLE; -- 不循环
-- 获取下一个值
SELECT nextval('order_no_seq');
-- 1000
SELECT nextval('order_no_seq');
-- 1001
-- 当前值
SELECT currval('order_no_seq');
-- ===== 同义词 =====
CREATE SYNONYM stu FOR public.student;
-- 直接用别名查询
SELECT * FROM stu;
常见误区
视图里存数据:普通视图不存数据,每次查询都执行里面的 SQL
序列和表绑定:序列是独立对象,删表序列还在,多个表可以共用
视图可以随便更新:一般视图不能直接 update,尤其是多表关联的视图
课后练习
创建一个视图,关联学生和课程,显示学生姓名和课程名
创建一个订单号序列,从 10000 开始,步长为 2
查询序列的下一个值,验证步长
思考:视图和表相比有什么优缺点?

