900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql数据库事务四大特性的实现原理

mysql数据库事务四大特性的实现原理

时间:2020-12-12 22:14:05

相关推荐

mysql数据库事务四大特性的实现原理

事务的四大特性

原子性、一致性、隔离性、持久性

原子性实现

原子性保证事务要么全执行成功,要么全不执行

mysql使用回滚机制实现,undo log实现回滚。

事务执行 insert、update、delete 操作,会生成对应的 undo log。undo log是和原操作相反的操作。例如添加一条记录,undo log 存储删除该记录。

原始数据:

执行sql对应的undo log

insert into t1 values(2, 40)//undo log: delete from t1 where id = 2update t1 set age = 30 where id = 1//undo log: update t1 set age = 20 where id = 1

持久性实现

持久性提交的记录保存到磁盘,宕机不会丢失。

MySQL数据存储在磁盘上,频繁读取I/O效率低,所以一般会在加一层内存缓冲区,通过缓冲区读取数据过程:

读数据:先尝试从缓冲区读取数据,缓冲区数据不存在,从磁盘读数据,并将读到的数据更新到缓冲区。写数据:先将数据写入到缓冲区,缓冲区的数据定时刷新到磁盘中。

使用缓冲区导致数据不是实时写入磁盘,为防止缓冲区数据丢失,mysql使用redo log保证持久性。redo log日志记录了所有更新操作,每更新一条记录,都会生成一个redo log日志,并将redo log日志写入磁盘。

虽然redo log也需要写盘,有IO消耗,但是redo log按照顺序写如磁盘,顺序IO效率更高。redo log 只记录更新的日志,需要刷盘的数据更小。

数据记录刷新以页为单位,每个页默认大小为16kb,即使页中跟新非常少的数据,也需要将这个页写回磁盘。

隔离性实现

隔离性多个事务并行执行,互不影响。

隔离级别:未提交读、提交读、可重复读、串行化。

mysql使用锁+多版本并发控制(MVCC)实现事务隔离。。insert delete 会加行锁,update使用索引时会加行锁,否则会加表锁;没有更新的记录会加next-key锁。select时,使用MVCC实现并发隔离读。MVCC只用在提交读、可重复读。

MVCC原理:/huhu123444/article/details/122036671

MVCC基本思路:保存记录的多个快照实现。每条记录会保存隐藏列,标志创建版本号、删除版本号等,事务会取版本号作为事务号。读操作对比版本号,避免加锁。

一致性实现

一致性保证修改记录满足约束条件,符合逻辑关系。例如:A向B还款100,A账户-100,B账户+100,同时A欠B的金额-100。

一致性通过原子性、持久性、隔离性保证。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。