数据库锁——冒出的问题
发布日期:2021-10-07 06:13:09 浏览次数:1 分类:技术文章

本文共 938 字,大约阅读时间需要 3 分钟。

1)为啥要加S锁?直接读不就得了?

        -------->S锁是事务在读取数据时,禁止其他事务对数据进行修改,同时允许其他事务对数据进行读取。考虑到如果其他事务在某事务A读取过程中进行了修改,可能导致事务A看到了它意想不到的结果。

        例如:事务A在读取数据时,读到了1000,多次刷新读取,事务B在事务A读取的过程中修改了数据为800,那么事务A在某次刷新之后就看到了数据为800,如果事务B又在A读取过程中回滚了,那么事务A在之后某次刷新后看到了数据又变回了1000。发生了脏读和不可重复读。

2)三级封锁协议中,一级封锁协议为啥要加X锁?而不是S锁?为啥要先考虑保护修改而不是读取呢?

        -------->修改的过程包括:首先要读取数据(read),然后再修改(update、insert、delete),提交或者回滚(commit、rollback),而读取则只包括一次查找。即修改是个“大操作”,读取是个“小操作”。从原子性的角度来看,首先要保全“大操作”的原子性,再对“小操作”的原子性进行补充。(个人观点)(貌似不对)

        -------->一级协议对如何加X锁进行了约束,即在修改数据之前加X锁,直到事务结束后才释放。

        二级协议和三级协议补充了一级协议,对如何加S锁进行了约束:

        二级协议中规定:除了一级协议外,事务如果只是想读取数据,必须先对数据加S锁,读取完成后释放S锁。

        三级协议比二级协议对S锁释放更加严格:除了一级协议外,事务如果只是想读取数据,必须先对数据加S锁,直到事务结束后释放S锁。

因此有如下图:

(图像来自:华中科技大学mooc)

在一致性保证中,可以发现,丢失修改是由修改导致的问题,而脏读和不可重复读都是由读取导致的问题。

2)、<1>又冒出的一个问题:在第三级协议中,S锁直到事务结束才释放,那么就不会导致幻读情况发生吧??到第三级协议时相当于达到了Serializable的级别??那为啥还要使用多版本控制干啥??

3)二级封锁协议是在一级的基础上,规定,事务读取数据之前必须先对其加S锁,读取完后可释放S锁。为啥?一级加锁中加了X锁可以读取也可以修改,为啥还要考虑加S锁?再说了加了X锁之后就不能再加S锁了,这为啥说是在“一级封锁协议基础上”

转载地址:https://blog.csdn.net/mengmengmengwang/article/details/108266831 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java使用invoke反射调用成员函数时遇到的坑--> IllegalArgumentException: wrong number of arguments
下一篇:看代码系列: frameworks/base/core/java/android/os/HandlerThread.java

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年03月25日 01时17分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

oracle 在需要下列之一,Oracle存储过程中PLS-00103:出现符号“/”在需要下列之一时:(... 2019-04-21
oracle10g dblink优化,Oracle10g通过dblink访问数据异常 2019-04-21
linux安装时的iso文件,直接用ISO文件在linux上安装新系统 2019-04-21
linux修改文件权限为所有人都可以访问,Linux 笔记分享八:文件权限的设定 2019-04-21
linux中卸载ambri-servle,Kerberos 命令使用 2019-04-21
linux二进制反编译,Xori:一款来自BlackHat 2018的二进制反汇编和静态分析工具 2019-04-21
linux两台主机添加信任,Linux两台机器间添加信任,实现不用密码问,互传文件... 2019-04-21
linux 自动获取ssl证书,linux生成自验证ssl证书的具体命令和步骤 2019-04-21
linux基础命令20个,20-linux中基础命令 2019-04-21
重置网络配置 android,重置Android移动网络信号? 2019-04-21
java约瑟夫环pta上_cdoj525-猴子选大王 (约瑟夫环) 2019-04-21
java++记录+运行_记录java+testng运行selenium(三)---xml、ini、excel、日志等配置 2019-04-21
mysql居左查询abcd_MySql速查手册 2019-04-21
loadrunner 错误: 无法找到 java.exe_LoadRunner错误及解决方法总结 2019-04-21
Java小魔女芭芭拉_沉迷蘑菇不可自拔,黏土人《小魔女学园》苏西·曼芭芭拉 图赏... 2019-04-21
php+mysql记事本_一个简单记事本php操作mysql辅助类创建 2019-04-21
300小时成为java程序员_直击面试现场: Java程序员3轮6小时面试, 成功拿到阿里offer!... 2019-04-21
中国网建java发送短信_短信验证登陆-中国网建提供的SMS短信平台 2019-04-21
隔行变色java代码_jquery入门—选择器实现隔行变色实例代码 2019-04-21
角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区... 2019-04-21