【问题标题】:how to save data permanently without using commit in Oracle?如何在不使用 Oracle 提交的情况下永久保存数据?
【发布时间】:2015-09-05 08:29:23
【问题描述】:

如何在不执行 COMMIT 的情况下保留 DML 语句的结果?例如,我怎样才能使这个更新永久化?

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20

SQL> update emp set comm=200 where empno=7369;


1 row updated.

SQL> select * from emp;
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800       200          20

【问题讨论】:

  • 这个问题没有意义。数据库本质上是事务性的。您必须对commitrollback 进行任何更改。你为什么不想commit你的零钱?
  • 提交我们保存数据的方式。你不妨问问怎么洗澡才不会弄湿。

标签: oracle transactions


【解决方案1】:

在SQLPlus中,你可以开启自动提交,然后你就不需要手动提交每个事务了:

SET AUTOCOMMIT ON

您也可以使用任何 DDL(数据定义语言)语句代替 COMMIT,
因为所有 DDL 语句都会发出隐式提交。
例如,您可以使用 COMMENT 语句来提交更改:

COMMENT ON TABLE emp IS 'some comment';

【讨论】:

    【解决方案2】:

    提交是我们将更改保存到数据库的方式。如果不发出提交,就不可能将数据保存到数据库中。 commit(和rollback)的发布定义了一个事务。

    通过提供autocommit 模式,一些数据库客户端将允许我们在不显式执行commit; 语句的情况下保存更改。例如,这是 JDBC (find out more) 和 ODBC (find out more) 的默认行为。

    对于 SQL*Plus(和大多数其他数据库 IDE),默认是手动控制事务。但是我们可以通过将autocommit 设置为ONIMMEDIATE 或数值来放弃控制,例如SET AUTOCOMMIT 8 将在每 8 个 DML 语句之后发出一个 commitFind out more

    autocommit 模式运行通常是个坏主意。仅仅因为有时我们会犯错而能够回滚更改是很有用的。但从业务角度来看,许多事务包含不止一个 DML 语句:在每个事务之后提交都会导致数据损坏,尤其是因为它损害了 Read Committed 隔离级别。 Find out more

    简而言之,开发人员应该学会正确使用事务。这是构建可靠数据库应用程序的关键。

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 2013-02-11
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2020-08-29
      • 1970-01-01
      相关资源
      最近更新 更多