事务是一系列的操作以原子性的执行,要么全部成功、要么全部失败。
-----------------------------------------------------------
四个特性:原子性、一致性、隔离性、持久性
-----------------------------------------------------------
隔离级别:操作同一数据的事务与事务之间的关系
1、读未提交,读事务和写事务均不加锁,可能出现脏读(如果写事务回退,那读到的就是没有提交的数据)、幻读、不可重复读的情况。
2、读已提交(不可重复读),写事务对修改行加排他锁(X锁),读到的数据是多次写事务的数据,多次结果不一样。(会出现不可重复读和幻读)
3、可重复读;mysql默认级别。写事务对修改行加排他锁,读事务要加S锁(共享锁)【加了S锁就不能加X锁,但是可以继续加S锁】,保证读的时候没人能修改。mysql没有使用这种机制,采用了MVCC(多版本并发控制),在每个表增加了两个字段(最新版本和删除版本号列),select all操作其实是要对这两个字段过滤。
会出现幻读:因为写事务只对行增加了X锁,新增和删除表的数据会变化,之前搜索出3天可能待会就会5条,除非写事务对整个表加锁,即4
4、串行化:解决三个问题,要求事务一个接着一个执行,读写都加X锁,或者写加表级别的锁。
-------------------------------------------------------------
事务传播机制 (解决事务嵌套事务的问题)
1、required 正在执行的事务,遇到新的事务,新的事务加入,一个异常,全部都异常,try catch也没用(一个回退,通知所有回退)
默认常用
2、required_new 遇到新事务,新建一个,互不干扰,无需牵扯。
。。。还有5个极少用的,有时间细看
网友评论