温馨提示×

温馨提示×

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

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

临时表支持事务吗

发布时间:2026-09-26 08:18:01 来源:亿速云 阅读:95 作者:小樊 栏目:数据库

结论先说:
临时表本身“是否支持事务”,取决于你用的数据库类型,以及临时表的创建方式。不能一概而论。

下面按常见数据库分别说明:


1. MySQL(InnoDB 引擎)

✅ 支持事务

  • 使用 CREATE TEMPORARY TABLE 创建的临时表
  • 如果是 InnoDB 引擎,完全支持事务(BEGIN / COMMIT / ROLLBACK)
  • 事务回滚时,临时表中的数据也会回滚

⚠️ 注意:

  • 临时表只对当前会话可见
  • 会话结束或连接断开,临时表自动删除
  • MyISAM 临时表不支持事务(但现在很少用)

示例:

CREATE TEMPORARY TABLE tmp_user (
  id INT,
  name VARCHAR(50)
) ENGINE=InnoDB;

START TRANSACTION;
INSERT INTO tmp_user VALUES (1, 'Tom');
ROLLBACK; -- 数据不会存在

2. PostgreSQL

✅ 支持事务

  • 临时表默认支持事务
  • 可以选择:
    • ON COMMIT PRESERVE ROWS(默认,事务结束保留数据)
    • ON COMMIT DELETE ROWS(事务提交后清空)
    • ON COMMIT DROP(事务结束删表)

示例:

CREATE TEMPORARY TABLE tmp_user (
  id INT,
  name TEXT
) ON COMMIT PRESERVE ROWS;

3. SQL Server

✅ 支持事务

  • #temp 本地临时表
  • ##temp 全局临时表
  • 都在事务中正常工作

注意:

  • 临时表在 tempdb 中
  • 事务回滚时,临时表中的数据也会回滚

4. Oracle

⚠️ 情况特殊

  • Oracle 的 临时表结构是永久的,但数据是 session / transaction 级别的
  • 支持事务,但行为不同于其他数据库

两种类型:

  • ON COMMIT DELETE ROWS(事务级)
  • ON COMMIT PRESERVE ROWS(会话级)

示例:

CREATE GLOBAL TEMPORARY TABLE tmp_user (
  id NUMBER,
  name VARCHAR2(50)
) ON COMMIT DELETE ROWS;

总结对照表

数据库 临时表支持事务 说明
MySQL (InnoDB) ✅ 推荐
PostgreSQL ✅ 灵活
SQL Server ✅ 原生支持
Oracle ✅ 表结构永久,数据临时

如果你愿意,可以告诉我:

  • 用的是哪种数据库
  • 是“想用临时表做事务处理”还是“担心事务不生效”

我可以给你更具体的用法建议。

向AI问一下细节

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

AI
助
手