数据库事务

定义(From 百科)

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

一个逻辑工作单元要成为事务,必须满足所谓的ACID (原子性、一致性、隔离性和持久性) 属性。

事务是数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。


基本特征

原子性

(Atomic)(Atomicity)
原子性表示事务中的操作,要么全部成功,要么全部失败。

一致性

(Consistent)(Consistency)
只有事务执行正常时才被允许,否则事务会将其回滚到最初状态。

隔离性

(Insulation)(Isolation)
事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

持久性

(Duration)(Durability)
事务完成之后,它对于系统的影响是永久性的。


事务语句

-开启事务:START TRANSACTION
-提交事务:COMMIT
-回滚事务:ROLLBACK


数据库三大问题

脏读

一个事务处理过程里读取了另一个未提交的事务中的数据。
一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。

不可重复读

指对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,是由于在查询间隔,被另一个事务修改并提交了数据。

幻读

事务非独立执行时发生一种现象。比如事务读取第一次和读取第二次之间,另一个数据往离插入或删除了数据,造成读取的数据条目不一致。

区别

脏读:读取了无效的数据。
不可重复读:不可重复读的重点是修改。同样的条件, 你读取过的数据, 再次读取出来发现值不一样了。
幻读:幻读的重点在于新增或者删除。同样的条件, 第1次和第2次读出来的记录数不一样。

隔离级别脏读不可重复读幻读
Serializablenonono
Repeatable readnonoyes
Read committednoyesyes
Read uncommittedyesyesyes

大部分数据库默认:Read committed
MYSQL默认:Repeatable read
脏读、不可重复读、幻读的级别高低是:脏读 < 不可重复读 < 幻读。


数据库事务相关

-------查询当前事务级别------
select @@tx_isolation;

-------设置事务级别----------
set  [glogal | session]  transaction isolation level 隔离级别名称;
or
set tx_isolation = ’隔离级别名称;

JDBC设置事务隔离级别

conn.setTransactionLevel(TRANSACTION_SERIALIZABLE);

Spring 设置事务隔离级别

<property name="transactionAttributes">
     <props>
          <prop key="*">ISOLATION_READ_COMMITTED</prop>
          <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>        
          <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
     </props>
</property>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值