zoukankan      html  css  js  c++  java
  • DML需手动提交事务,DCL和DDL自动提交事务

    我们知道oracle中是以事务为单位进行数据库的更改操作的。那么oracle是在什么时机来提交的呢?对于DML语句,oracle不会自动提交事务,直到有一条commit或者rollback命令来处理时才会将改动反应到数据库里。而对于DDL和DCL,oracle会马上提交,也就是说一执行完这两类语句,就会反应到数据库中,还有一种情况是,前面执行的DML没有被手动提交,执行完DDL或者DCL后,oracle也会将DML对与数据的改动提交到数据库中去。

    oralce的事务开始于第一条DML语句,结束于下面几种情况

    1. 一条显式的COMMIT或者Rollback命令
    2. 一条DDL或者DCL语句
    3. 用户退出SQL*plus或者SQL*plussheet 或者iSQL*plus
    4. 系统崩溃

    这种Commit和rollback机制的好处是:

    1. 保证了数据的一致性
    2. 在数据永久改变之前可以预览数据
    3. 可以将逻辑上的一组操作一起提交到数据库。我们经常需要保证表1和表2的数据一致,要么同时插入,要么同时不插入。使用这种Commit和rollback机制就非常方便。

    这样我们就要在脑子里形成这样一个印象,oracle会在我们执行了DCL或者DDL时,或者正常退出SQL*plus相关工具时,进行隐式的commit操作,而在系统崩溃时,或者非正常退出SQL*plus相关工具时是会自动的回滚数据,执行rollback操作的。

    还需要说明的是只要事务没有完成,你所操作的数据是被锁定的,除了你之外的其他用户,是查询不到的你所做的更改的,也是无法进行更新或者删除操作的,如果其他用户试图操作这些数据,将会被迫等待,这时往往造成机器死机,直到你把相关的数据提交或者回滚。

    在oracle中我们也还可以进行语句级的回滚操作,这时我们需要定义savepoint回滚点。

  • 相关阅读:
    C++笔记--模板
    C++笔记--抽象机制
    C++--VECTOR的简单应用
    C++面试笔记--STL模板与容器
    C++面试笔记--指针和引用
    《转载》什么变量在堆内存里存放,什么变量在栈内存里存放
    C++面试笔记--const、sizeof
    C++面试笔记--宏定义
    C++笔记--指针数组和结构
    C++笔记--异常
  • 原文地址:https://www.cnblogs.com/lzhdim/p/1360602.html
Copyright © 2011-2022 走看看