温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Temporary Table能写视图吗

发布时间:2026-09-05 18:41:33 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

简单直接的回答是:不能把视图建立在 Temporary Table(临时表)上,至少在主流关系型数据库中通常不行。

下面分数据库说明一下:


1. MySQL

不支持在临时表上创建视图。

CREATE TEMPORARY TABLE tmp_t (id INT);
CREATE VIEW v_tmp AS SELECT * FROM tmp_t;
-- ERROR: 视图不能引用临时表

原因:视图是存储在数据字典中的对象,而临时表只存在于当前会话,生命周期不一致。


2. PostgreSQL

也不支持对临时表建普通视图。

不过 PostgreSQL 支持 临时视图(TEMPORARY VIEW)

CREATE TEMPORARY TABLE tmp_t (id INT);
CREATE TEMPORARY VIEW v_tmp AS SELECT * FROM tmp_t;

✅ 这是“临时视图 + 临时表”的组合,只在当前会话可见。


3. SQL Server

不能#temp 表上创建普通视图。

但可以使用:

  • 临时表 + 内联表值函数(inline TVF)
  • 或临时表 + 公用表表达式(CTE)
CREATE VIEW v_tmp AS SELECT * FROM #tmp;
-- 不支持

4. Oracle

Oracle 的临时表是 GLOBAL TEMPORARY TABLE,结构是全局的,数据是会话级的。

可以基于全局临时表创建视图

CREATE GLOBAL TEMPORARY TABLE tmp_t (id NUMBER) ON COMMIT DELETE ROWS;
CREATE VIEW v_tmp AS SELECT * FROM tmp_t;

这是 Oracle 的一个特例。


总结

数据库 能否在临时表上建视图
MySQL ❌ 不能
PostgreSQL ❌(但可建临时视图)
SQL Server ❌ 不能
Oracle ✅ 可以(全局临时表)

常见替代方案

  • 使用 CTE(WITH 子句)
  • 使用 派生表
  • 使用 临时视图(PostgreSQL)
  • 使用 物化视图(部分场景)

如果你能告诉我用的是哪种数据库,我可以给你更合适的写法。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI