事务

2020-02-19  本文已影响0人  红烧鸡翅膀_我喜欢吃

事务是一系列的操作以原子性的执行,要么全部成功、要么全部失败。

-----------------------------------------------------------

四个特性:原子性、一致性、隔离性、持久性

-----------------------------------------------------------

隔离级别:操作同一数据的事务与事务之间的关系

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个极少用的,有时间细看

上一篇 下一篇

猜你喜欢

热点阅读