首页 > 数据库 >数据库笔记小结

数据库笔记小结

时间:2023-01-20 22:45:13浏览次数:33  
标签:事务 数据库 undolog DB 笔记 MVCC 日志 小结 ID

ACID是靠什么保证的?


原子性由undolog日志来保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;
一致性由其他三大特性保证,程序代码需要保证业务上的一致性;
隔离性是由MVCC来保;
持久性由redolog日志来保证,mysql修改数据的时候会在redolog中记录一份日志数据,就算数据没有保存成功,只要日志保存成功了数据就不会丢失;

MVCC(多版本并发控制)是什么?它解决的问题是什么?


数据库并发场景由三种:
1、读读:不存在问题,不考虑并发控制;
2、读写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读、幻读和不可重复读;
3、写写:有线程安全问题,可能存在更新丢失问题;

MVCC是一种用来解决读写冲突的无锁并发控制,也就是为事务分配单项增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前数据库的快照,所以MVCC可以为数据库解决以下问题:
1、在并发读写数据库时,可以做到在读操作时不阻塞写操作,写操作时也不用阻塞读操作,提高了数据库并发读写的性能;
2、解决脏读、幻读、不可重复读等事务隔离问题,但是不能解决更新丢失问题;

MVCC的实现原理

MVCC的实现原理主要依赖于字段的三个隐藏字段、undolog和read view来实现。

隐藏字段
每行记录除了我们自定义的字段外还有数据库隐式定义的DB_TRX_ID、DB_ROLL_PTR和DB_ROW_ID等字段。

  • DB_TRX_ID:最近修改事务id,保存创建这条记录或者最后一次修改时的事务id;
  • DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本,用于配合undolog,指向上一个旧版本???
  • DB_ROW_ID:隐藏的主键:如果数据表没有主键,那么innodb会自动生成一个6字节的row_id,
    eg:

| name | age| gender | DB_ROW_ID | DB_TRX_ID | DB_ROLL_PTR |


|zhangsan | 23 | 男 | 1 | 1 | 0x12312313 |


@read view是什么?
保证多个并行的事务之间能否相互读取到对方的数据

@undolog
undolog被称之为回滚日志,表示在进行insert、delete和update操作时产生的方便回滚的日志。

  • 当进行insert操作的时候,产生的undolog只在事务回滚的时候需要,在事务提交之后可以立即丢弃;
  • 当进行update和delete操作的时候,产生的undolog不仅仅在事务回滚的时候需要,在快照读的时候也需要

以上内容参考自马士兵老师的课程

标签:事务,数据库,undolog,DB,笔记,MVCC,日志,小结,ID
From: https://www.cnblogs.com/bwqueen/p/17063352.html

相关文章