0Pricing
SQL Academy · 课时

普通视图:逻辑复用

创建视图封装复杂查询、简化报表,并向用户授予对部分列的读取权限

普通视图:逻辑复用 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

什么是视图

视图是保存的 SELECT。每次查询视图时,底层 SELECT 都会运行。它就像一个命名查询,您可以对其进行 JOIN、筛选和聚合。

CREATE VIEW active_users AS
  SELECT id, email, full_name
  FROM users
  WHERE deleted_at IS NULL;

使用视图

像查询任何表一样查询它:

SELECT COUNT(*) FROM active_users;
SELECT * FROM active_users WHERE email LIKE '%@gmail.com';

视图不会存储结果

存储的是视图定义,而不是结果。每次查询都会展开视图并运行底层 SELECT。查询计划方面的考量也相同。

为什么使用视图

  • 复用——只需定义一次复杂查询
  • 抽象——隐藏实现细节(连接 3 个表 → “active_users”)
  • 安全性——授予视图 SELECT 权限,同时不暴露基础表
  • 兼容性——架构更改后仍能保持旧查询结构正常工作

CREATE OR REPLACE

就地更新视图——但前提是列类型和顺序匹配:

CREATE OR REPLACE VIEW active_users AS
  SELECT id, email, full_name, last_login
  FROM users
  WHERE deleted_at IS NULL;

-- ERROR if columns conflict; DROP VIEW + CREATE VIEW instead.

包含 JOIN 和聚合的视图

常见情况:按用户汇总:

CREATE VIEW user_stats AS
SELECT u.id, u.email,
       COUNT(o.id) AS order_count,
       COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;

可更新视图

简单视图(单个表、没有聚合、没有 DISTINCT)是可更新的——您可以通过它们执行 INSERT/UPDATE/DELETE。PostgreSQL 会在可能的情况下自动更新它们。

带架构限定的视图

将实用视图放在专用架构中:

CREATE SCHEMA api;
CREATE VIEW api.users_public AS
  SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;

GRANT SELECT ON api.users_public TO app_reader;

视图与权限

默认情况下,视图以查询用户的权限运行——该用户仍需要基础表的权限。如果要让低权限用户查询敏感表,请改用 SECURITY DEFINER 函数。

性能考量

规划器会展开视图并应用通常的优化。有时视图中的 GROUP BY 会阻止谓词下推——如果 EXPLAIN 显示存在问题,请将其拆分或重写。

视图依赖关系

如果视图依赖某个基础表,删除该表的操作会被阻止。只有在确实需要时才使用 DROP TABLE ... CASCADE。列出依赖对象:

SELECT * FROM pg_depend
WHERE refobjid = 'users'::REGCLASS;

回顾

视图是可复用的 SELECT。

  • 定义一次,查询多次
  • 抽象与安全性
  • 简单时可更新
  • 每次查询都会重新执行——没有内置缓存

快速检查

查询视图会存储其结果吗?

常见问题解答

「普通视图:逻辑复用」课时是免费的吗?

是的 — 「普通视图:逻辑复用」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「普通视图:逻辑复用」这节课中我会学到什么?

创建视图封装复杂查询、简化报表,并向用户授予对部分列的读取权限 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「普通视图:逻辑复用」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 普通视图:逻辑复用
  2. 可更新视图与 INSTEAD OF 触发器
  3. 物化视图与 REFRESH 策略
  4. 何时进行预聚合
← 返回 SQL Academy