士沌 发表于 2026-3-3 22:20:00

数据库事务机制

数据库事务机制功能介绍

1.事务功能作用

功能作用:事务功能主要是保证数据库中数据的安全性事务机制: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 存储数据过程中:需要处理的数据都会加载到内存中内存区域         磁盘区域账户A400                     账户A500   -- page01账户B100                     账户B0page01page01 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 存储数据过程中:需要处理的数据都会加载到内存中内存区域         磁盘区域账户A400                     账户A500   -- page01账户B100                     账户B0page01数据库停止了 (没有做双写操作 没有将数据写入磁盘)内存区域                        磁盘区域账户A400                     账户A500   -- page01账户B100                     账户B0page01update 记录信息 -- redo文件(记录对数据页中数据的操作信息)                            page01账户A500->400 账户B0->100commit 内存区域                        磁盘区域                                 账户A500   -- page01                                 账户B0数据库异常停止,再次重新启动时,会自动触发灾难恢复机制(InnoDB crash recovery)会加载redo文件信息 根据redo文件中数据页信息和磁盘中对应数据页数据对对比redo page01 (LSN信息做对比 01 LSN=200)       磁盘page01(LSN信息做对比 01 LSN=100)账户A500->400400                        账户A500账户B0->100    100                        账户B0将磁盘中原有数据页重新加载到内存中,并根据redo文件中的操作记录,重新对数据信息进行处理内存区域

遇玷 发表于 2026-3-7 12:20:02

过来提前占个楼

山真柄 发表于 2026-3-12 04:21:44

感谢,下载保存了
页: [1]
查看完整版本: 数据库事务机制