Oracle 事务

数据库事务

事务的开始于结束:

连接到数据库上,并执行一条DML语句(insert,update或delete)
前一个事务结束后,又输入一个DML语句.
事务(Transaction) 是由一组(多条)SQL语句组成的最小逻辑工作单元.
事务是为了保证数据的一致性.

事务的提交和回滚

要永久性的记录事务中SQL语句的结果,需要执行commit语句,从而提交事务.

事务结束:

执行commit或rollback语句.
执行一条DDL语句,create table,都会自动提交commit;
断开数据库的连接,退出sqlplus时,输入exit的时候 都会被commit.
如果sql
plus 被意外终止了,计算机蓝屏,会自动执行rollback语句.
执行一条DML语句,该语句失败,这种情况,会执行rollback语句;

只有DML存在事务的概念,DDL和DCL没有事务的概念,执行就被提交.

设置保存点:

保存点就是事务中标记.把一个较长的事务分为多个较短的事务.可以回滚到制定的保存点.

    savepoint savepoint_name;

事务的ACID特性:

  1. 事务的概念;事务是把对数据库的一系列操作都看做一个整体,要么全部成功,要么全部失败,利用事务我们可以保证数据库的完整性,
  2. 原子性(Atomic) 事务是原子的,这就是说事务中包含的所有SQL语句都是一个不可分割的工作单元.
  3. 一致性(Consist) 事务必须确保数据库的状态保存一致,事务开始时,数据库的状态是一致的,事务结束时,数据库的状态也必须是一致的.
  4. 隔离性(Isolated) 多个事务可以独立运行,而不会彼此影响.
  5. 持久性(Durable) 一旦事务被提交后,数据库的变化就会被永久记录,即使数据库软件崩溃.

并发事务:

数据库支持多个用户同时对数据库进行交互,每个用户都可以同时运行自己的事务,这种事务就称为并发事务

用户同时运行多个事务,而这些事务对同一张表产生影响.那么这些事务是互相独立的.

直达执行一条commit才会彼此产生影响.

事务锁:

当多个事务对同一条数据进行操作的时候,就会产生事务锁.
第二个事务必须等待第一个事务释放该锁(提交/回滚);

并发事务会产生的问题:

事务隔离级别:
是一个事务对数据库的修改与并行的另外一个事务的隔离程度.
两个并发事务T1和T2正在访问相同的行数据.

幻象读取:

事务T1读取一条指定的where子句返回的结果集.然后事务T2新插入一行数据,这行
恰好可以满足T1查询的where条件.然后T1又使用相同的查询再次对表进行查询,但
此时看到了事务T2刚才插入的新行,这个新行就称为"幻象"

不可重复读:

事务T1读取一行数据,紧接着T2修改了T1刚才读取的哪一行数据.然后T1再次读取的时候,
发现刚才读取的结果不同的了.这种现象称为 " 不可重复读".

脏读:

事务T1更新了一行数据,但是并没有提交所修改的内容,事务T2读取更新后的行,然后T1回滚操作,
取消了刚才所做的修改,先T2所读取的行就无效了.这种现象"脏读".
因为在T2读取这行数据的时候,T1所做的修改并没有提交.

隔离级别 从低到高
read uncommitted 幻读,不可重复读和脏读都允许
read committed 允许幻读和不可重复读,但是不允许脏读
reoeatabke read 允许幻读,但是不允许不可重复读和脏读
serializable 幻象读,不可重复读和脏读都不允许

Oracle 数据库只支持read committed和serializable两种事务隔离级别.
set transaction isolation level
{
read committed|
serializable
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容