MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

什么是事务?事务的四大特性?不考虑隔离性的问题?隔离级别?

2024-11-26 20:02 huorong 数据库 5 ℃ 0 评论

1.什么是事务:

事务:是数据库操作的最小工作单元,是作为单个逻辑单元执行的一系列操作;

这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组

不可在分割的操作集合(工作逻辑单元)


2.事务的四大特性ACID

1.原子性:事务中所有操作是不可在分割的原子单元。事务中所有操作要么

都执行成功,要么都执行失败。

2.一致性:事务前后数据的完整性必须保持一致

3.隔离性:隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个

并发中的事务不会互相干扰

4.持久性:是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使

数据库发送故障也不应该对其有任何影响。


3.不考虑隔离性会产生的三个问题

脏读:一个事务处理过程中读取另一个未提交的事务中的数据


不可重复读:一个事务两次读取同一行数据,结果不同状态的结果,中间正好

另一个事务更新了该数据,两次结果相异,不可被信任。


幻读:一个事务执行两次查询,第二次结果集包含第一次中没有或某行已经被删除

的数据,造成两次结果不一致,只是另一个事务在这两次查询中间插入或删除了数据造成的。


4.解决办法:四种隔离级别

1.Read Uncommitted(读取未提交内容)

读未提交,一个事务可以读取另一个未提交事务的数据,但是读未提交产生了脏读,采用读提交可以解决脏读问题

2.Read Committed(读取提交内容)

读提交,一个事务等待另一个事务提交后才能读取数据。读提交,若有事务对数据进行更新(update)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。

3.Repeatable Read(重复读)

重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。重复读可以解决不可重复读问题。不可重复读对应的是修改,即update操作。但是可能还会有幻读问题。幻读问题对应的是插入insert操作。

4.Serializable(可串行化)

Serializable是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。凡是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。


注意

1.大多数数据库默认的事务隔离级别是Read committed,如Sql Server。Oracle,Mysql的默认隔离级别是Repeatable read

2.隔离级别的设置只对当前连接有效。对于使用Mysql命令窗口而言,一个窗口就相当于一个连接,当前窗口设置的隔离级别只对当前窗口中的事务有效;对于JDBC操作数据库来说,一个Connection对象相当于一个链接,而对于Connection对象设置的隔离级别只对Connection

对象有效,与其他链接Connection对象无关。

3.设置数据库的隔离级别一定要是在开启事务之前。


mybatis中的事务:

它是通过sqlSession对象的commit方法和rollback方法实现事务的提交和回滚。


Tags:oracle的事务

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言