oracle-oracle事务(简)

事务

  • 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,

事务的特点ACID

  • 原子性:操作要么全做,要么全部不做
  • 一致性:事务操作的前后,数据必须满足业务的规则
  • 隔离性:数据库允许多个事务同时对其中的数据进行读改能力,隔离性可以防止多个事务的并发执行时,由于它们的操作命令交叉执行而导致数据的不一致性
  • 持久性:在事务处理结束后,它对数据的修改应该是永久的

在oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始
默认都是读已提交Read Committed

特别说明:set transaction只对当前事务有效,事务终止,事务当前的设置将会失效


  • 错读|脏读:当一个事务修改数据时,另一事务读取了该数据,但是第一事务由于某种原因取消对数据修改,使数据返回了原状态,这是第二个事务读取的数据与数据库中数据不一致.这就叫错读。

  • 非重复读取:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。

  • 假读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。

事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。


  1. Read UnCommitted(读未提交)
    最低的隔离级别。一个事务可以读取另一个事务并未提交的更新结果。
  2. Read Committed(读提交)
    大部分数据库采用的默认隔离级别。一个事务的更新操作结果只有在该事务提交之后,另一个事务才可以的读取到同一笔数据更新后的结果。
  3. Repeatable Read(重复读)
    mysql的默认级别。整个事务过程中,对同一笔数据的读取结果是相同的,不管其他事务是否在对共享数据进行更新,也不管更新提交与否。
  4. Serializable(序列化)
    最高隔离级别。所有事务操作依次顺序执行。注意这会导致并发度下降,性能最差。通常会用其他并发级别加上相应的并发锁机制来取代它。

猜你喜欢

转载自blog.csdn.net/m0_56981185/article/details/126512869