士沌
昨天 22:20
数据库事务机制功能介绍
1.事务功能作用
[code]功能作用:事务功能主要是保证数据库中数据的安全性事务机制:ACID详细ACID参考链接:https://dev.mysql.com/doc/refman/8.4/en/mysql-acid.htmlA: atomicity(原子性)在一个事务中,做的所有语句操作,要么都成功,要么都失败,不能有部分成功部分失败的情况银行转账 账户A -100-> 账户B账户表中账户名称 账户金额账户A 500账户B 0update 账户表 set 账户金额=账户金额-100 where 账户名称='账户A'; 400元update 账户表 set 账户金额=账户金额+100 where 账户名称='账户B'; 100元C: consistency (一致性)在一个事务处理数据过程中,数据库正常运行或数据库出现异常重启后,数据信息要保证一致性银行转账 账户A -100-> 账户B update 账户表 set 账户金额=账户金额-100 where 账户名称='账户A'; update 账户表 set 账户金额=账户金额+100 where 账户名称='账户B';select * from 账户表;账户名称 账户金额账户A 400账户B 100commit; -- 将内存查看信息保存到磁盘(自动提交/手动提交)重启数据库账户名称 账户金额账户A 500账户B 0doublewrite buffer -- 双写缓冲区/双写文件中(#ib_16384.dblwr)mysql 存储数据过程中:需要处理的数据都会加载到内存中内存区域 磁盘区域账户A 400 账户A 500 -- page01账户B 100 账户B 0page01page01 16kB block-01 4kB block-02 4kB 数据库进程停止了 page01 - 16KB -- 坏页 .. block-04 4kBpage01 16kB 4KB 4KB 4KB 4KB -- doublewrite buffer -- #ib_16384.dblwr (完整内存中16KB数据信息) page01 - 16KB -- 坏页数据库异常停止,再次重新启动时,会自动触发灾难恢复机制(InnoDB crash recovery)加载磁盘中可能存在坏页: page01 - 16KB -- 坏页 -- 修复坏页 -- 加载#ib_16384.dblwr 将双页文件中数据修复到坏页中I:Isolation (隔离性)在一个事务中应用隔离特性,主要用于保证事务的操作过程,不会受到其他事务对相同数据操作的影响银行转账 账户A -100-> 账户B 账户A - 500 -> 账户C 事务01 账户A -100-> 账户Bupdate 账户表 set 账户金额=账户金额-100 where 账户名称='账户A'; 账户A - 行 Row Lock -- unLockupdate 账户表 set 账户金额=账户金额+100 where 账户名称='账户B';commit;事务02 账户A - 500 -> 账户Cupdate 账户表 set 账户金额=账户金额-500 where 账户名称='账户A'; 账户A - 行 阻塞update 账户表 set 账户金额=账户金额+500 where 账户名称='账户C';-- 可以应用锁机制(写冲突问题)和隔离级别设置(读冲突问题)确保并行事务操作相同数据不会产生冲突D: durability (持久性)事务持久特性,主要是用于保证当数据库内存中没有保存到磁盘的数据释放后,可以有效进行内存数据恢复mysql 存储数据过程中:需要处理的数据都会加载到内存中内存区域 磁盘区域账户A 400 账户A 500 -- page01账户B 100 账户B 0page01数据库停止了 (没有做双写操作 没有将数据写入磁盘)内存区域 磁盘区域账户A 400 账户A 500 -- page01账户B 100 账户B 0page01update 记录信息 -- redo文件(记录对数据页中数据的操作信息) page01 账户A 500->400 账户B 0->100commit 内存区域 磁盘区域 账户A 500 -- page01 账户B 0数据库异常停止,再次重新启动时,会自动触发灾难恢复机制(InnoDB crash recovery)会加载redo文件信息 根据redo文件中数据页信息和磁盘中对应数据页数据对对比redo page01 (LSN信息做对比 01 LSN=200) 磁盘 page01 (LSN信息做对比 01 LSN=100)账户A 500->400 400 账户A 500账户B 0->100 100 账户B 0将磁盘中原有数据页重新加载到内存中,并根据redo文件中的操作记录,重新对数据信息进行处理内存区域 |
|
|
|
|
|
相关推荐
|
|
|