“临时表如何与其他数据库交互”这个问题,要看临时表所在的数据库类型、临时表的作用范围以及**“其他数据库”是指同实例下的不同库,还是不同数据库产品(如 MySQL ↔ Oracle)**。下面按常见场景系统说明。
临时表通常是会话级或事务级的:
因此:
临时表本身不能直接被“其他数据库”或“其他会话”访问
能否“交互”,取决于你的交互方式。
✅ 可以访问临时表 只要在同一个会话中。
USE db1;
CREATE TEMPORARY TABLE tmp_user AS
SELECT * FROM db2.user;
SELECT * FROM tmp_user;
✅ tmp_user 是会话级临时表
✅ 可访问 db2.user(其他库)
❌ 其他会话看不到 tmp_user
SQL Server 临时表分两种:
| 类型 | 名称 | 作用域 |
|---|---|---|
| 局部临时表 | #tmp |
当前会话 |
| 全局临时表 | ##tmp |
所有会话(谨慎使用) |
SELECT * INTO #tmp
FROM other_db.dbo.user;
✅ 可跨同实例数据库
❌ 其他会话不可见
SELECT * INTO ##tmp
FROM other_db.dbo.user;
✅ 其他会话可见
⚠️ 容易造成并发问题
❌ 临时表 不能直接跨数据库实例交互
只能通过 中间层 或 数据迁移方式。
DB_A(临时表) → 应用读取 → DB_B
示例流程:
✅ 安全、可控
✅ 支持异构数据库(Oracle ↔ MySQL)
流程:
临时表 → 抽取 → 中间存储 → 目标库
✅ 企业级
✅ 支持实时 / 批量
CREATE TEMPORARY TABLE tmp AS
SELECT * FROM remote_db.table@dblink;
✅ 支持
⚠️ 临时表仍在本地
❌ 不支持 dblink
只能应用层中转
临时表 → CSV → 其他数据库
示例:
SELECT * INTO OUTFILE '/tmp/tmp.csv'
FROM tmp_table;
然后导入目标库
✅ 简单
❌ 不适合高频
-- 临时表
CREATE TEMP TABLE tmp_result AS
SELECT ...
-- 结果表(可被其他库访问)
INSERT INTO public.result_table
SELECT * FROM tmp_result;
❌ 认为临时表可以被其他会话直接访问
❌ 用临时表做跨系统数据交换
❌ 在分布式系统中用临时表共享数据
临时表不能直接与其他数据库交互,只能通过应用层、ETL、文件或结果表间接交互。
如果你能告诉我:
我可以给你一个最适合你场景的具体方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。