MySQL-事务

什么是事务

事务:数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务时一组不可再分割的操作集合(工作逻辑元)

典型事务场景(转账):

update user_account set balance = balance - 1000 where userID = 3;
update user_account set balance = balance + 1000 where userID = 1;

mysql中如何开启事务

begin / start transaction
commit / rollback
set session autocommit = on/off  设定事务是否自动开启

JDBC编程

connection.setAutoCommit(boolean);

Spring事务AOP编程

expression = execution(com.king.dao.*.*(..))

事务ACID特性

  • 原子性(Atomicity):最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚
  • 一致性(Consistency):事务中操作的数据及状态改变是一致的,即写入资料的结果必须完全符合预设的规则,不会因为出现系统意外等原因导致状态的不一致
  • 隔离性(Isolation):一个事务所操作的数据再提交之前,对其他事务的可见性设定(一般为不可见)
  • 持久性(Durability):事务所做的修改就会永久保存,不会因为系统意外导致数据的丢失

事务并发带来了哪些问题

脏读

不可重复读

幻读

事务的四种隔离级别

SQL92 ANSI/ISO标准:

Read Uncommitted(未提交读)

未解决并发问题;事务未提交对其他事务也是可见的,脏读

Read Committed(提交读)

解决脏读问题;一个事务开始之后,只能看到自己提交的事务所作的修改,不可重复读

Repeatable Read(可重复读)

解决不可重复读问题;在同一个事务中多次读取同样的数据,结果是一样的,这种隔离级别未定义解决幻读问题

Serializable(串行化)

解决所有问题;最高的隔离级别,通过强制事务的串行执行

Innodb引擎对隔离级别的支持程度

事务隔离级别

脏读

不可重复读

幻读

未提交读(Read Uncommitted)

可能

可能

可能

已提交读(Read committed)

不可能

可能

可能

可重复读(Repeatable Read)

不可能

不可能

对InnoDB不可能

串行化(Serializable)

不可能

不可能

不可能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值