本节目标:
1、掌握事务的特性与事务并发造成的问题
2、事务读一致性问题的解决方案
3、MVCC的原理
4、锁的分类、行锁的原理、行锁的算法
一,什么是数据库的事务?
事务的典型场景
在项目里面,什么地方会开启事务,或者配置了事务?无论是在方法上加注解,还是配置切面。
tx:adviceid="txAdvice"transaction-manager="transactionManager"tx:attributestx:methodname="save*"rollback-for="Throwable"/tx:methodname="add*"=/tx:methodname="send*"=/tx:methodname="insert*"=///tx:advice
比如下单,会操作订单表,资金表,物流表等等,这个时候我们需要让这些操作都在一个事务里面完成。当一个业务流程涉及多个表的操作的时候,我们希望它们要么是全部成功的,要么都不成功,这个时候我们会启用事务。
在金融的系统里面事务配置是很常见的,比如行内转账的这种操作,如果我们把它简单地理解为一个账户的余额增加,另一个账户的余额减少的情况(当然实际上要比这复杂),那么这两个动作一定是同时成功或者同时失败的,否则就会造成银行的会计科目不平衡。
事务的定义
什么是事务?
维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。这里面有两个关键点,第一个,它是数据库最小的工作单元,是不可以再分的。第二个,它可能包含了一个或者一系列的DML语句,包括insertdeleteupdate。(单条DDL(createdrop)和DCL(grantrevoke)也会有事务)
哪些存储引擎支持事务
一是InnoDB支持事务,这个也是它成为默认的存储引擎的一个重要原因:dev.mysql.