mysql事务-mysql45讲-打卡活动

1.数据库ACID

A 原子性(Atomicity):mysql中用了锁机制来保证了原子性,有悲观锁和乐观锁,悲观锁是锁了整个表或库,锁库时,一般是做数据迁移操作时,而且一般是锁从库,乐观锁的实现分两种,一种是加for update 锁住了行,还有一种是加了版本号来实现
C 一致性(Consistency):mysql用了事务回滚机制,在行记录里,记录了回滚指针和事务id(trx_id),利用了日志文件来进行回滚(undo log)
I 隔离性(Isolation):设置了事务隔离级别,来隔离数据的可见性,在可重复读下,利用MVCC机制
D 持久性(Durability):mysql利用了redo log和bin log来保证了数据不丢失,重启后,可以根据redo log和bin log来恢复数据
 

2.mysql的事务隔离级别

1)读未提交,一个事务读到了另一个事务未提交的数据,假如另一个事务回滚,那会使数据错误,这也就是脏读
2)读已提交, 一个事务在读取某些数据后的某个时间,再次读取以前读过的数据,却发现其读出的数据已经发生了改变、或某些记录已经被删除了
3)可重复读,这个级别,对大部分场景是没什么问题的,但会产生幻读的情况,比如 按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据
4)串行化
 

3.mysql的锁

mysql的锁,除了刚刚说的悲观锁和乐观锁,还有表锁和行锁,间隙锁,区间锁,而间隙锁是为了能解决幻读产生的问题,但又会影响插入数据的影响,所以,在实际项目中,要综合考虑

4.MVCC
MVCC是多版本并发控制,这是为了实现可重复读,利用undo log日志版本链,trx_id和 roll_pointer这两个隐藏列,生成read view
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章