数据库事件机制 [复制链接]
发表于 2026-3-3 23:01:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
数据库事件机制功能先容

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文件中的操纵记录,重新对数据信息举行处理惩罚内存地区
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表