“临时表”分几种场景,不能一概而论。下面按最常见的数据库,分别说明哪些可以备份、哪些不能、以及替代方案。
| 数据库 | 临时表类型 | 是否可传统备份 | 特点 |
|---|---|---|---|
| MySQL | TEMPORARY TABLE |
❌ 不能 | 会话级,连接断开即消失 |
| Oracle | GLOBAL TEMPORARY TABLE |
❌ 不能 | 只存结构,数据不进备份 |
| SQL Server | #temp / ##temp |
❌ 不能 | 会话级或实例级临时 |
| PostgreSQL | TEMP TABLE |
❌ 不能 | 会话结束自动删除 |
✅ 临时表的设计目的就是“不持久化”
因此:
不会有 binlog / redo / 传统逻辑备份(如 mysqldump)包含临时表数据
CREATE TEMPORARY TABLEmysqldump 不会导出binlog 也不记录数据内容(只可能有 DDL)CREATE TABLE backup_tmp AS
SELECT * FROM tmp_table;
或者结构 + 数据分离:
CREATE TABLE tmp_backup LIKE tmp_table;
INSERT INTO tmp_backup
SELECT * FROM tmp_table;
✅ 这样就能:
mysqldumpSELECT * INTO OUTFILE '/tmp/tmp_table.txt'
FIELDS TERMINATED BY ','
FROM tmp_table;
恢复:
LOAD DATA INFILE '/tmp/tmp_table.txt'
INTO TABLE tmp_table
FIELDS TERMINATED BY ',';
如果你已经意识到要断连接:
CREATE TABLE real_table AS
SELECT * FROM tmp_table;
⚠️ 一旦连接断开,临时表就永久消失
Oracle 的临时表 只有表结构可备份
CREATE TABLE tmp_backup AS
SELECT * FROM user_tables
WHERE temporary = 'Y';
exp / expdp / rman 不包含数据✅ 正确方式:
CREATE TABLE normal_table AS
SELECT * FROM global_temp_table;
#tmpSELECT * INTO dbo.tmp_backup
FROM #tmp;
CREATE TABLE backup_tmp AS
SELECT * FROM tmp_table;
或
COPY tmp_table TO '/tmp/tmp.csv' CSV;
临时表不能也不应该被“备份”
✅ 正确的思路是:
在临时表存在期间,主动转存为普通表或文件
✅ 如果临时表数据“很重要”:
✅ 临时表只适合:
如果你愿意,可以告诉我:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。