数据库的常用4种隔离级别

jiaoshiyao 2019-08-02 10:06:30
未提交读(A事务未提交的修改,其他事务可以读取出来)
已提交读(A事务未提交的数据,其他事务读取不到差异,直到commit后才可以读取出来)
可重复读(当涉及到DML操作时,会锁行,其他表无法DML)
串行化(锁表)
我没有深入理解这4种隔离级别的不同,比如我使用了mysql默认的可重复读隔离级别进行测试的时候发现
我执行以下sql语句,好像仍然锁表了
begin tran;update emp set ename = 'lisi' where empno = 9002;

不提交事务,然后打开另一个连接执行
begin tran;update emp set ename = 'lisi' where empno = 9005;

后发现,第二个连接无法执行,最后lock wait timeout,
不是说锁行吗,为啥我where empno = 9005,修改的数据不是第一个执行的9002啊,为什么还会这样
另外串行化,锁表好像分为读锁(共享锁),写锁(排他锁),具体有什么深入的案例啊
...全文
406 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaoshiyao 2019-08-23
  • 打赏
  • 举报
回复
确实是索引锁行,无索引锁表。。。
单机人生 2019-08-08
  • 打赏
  • 举报
回复
但我估计不是这个问题,你那个查询条件的字段肯定是可重复插入一样数据的字段!原因了解一下间隙锁!
单机人生 2019-08-08
  • 打赏
  • 举报
回复
你设计的表有主键么?有索引么?innodb实现行锁是建立在索引项上的,没有就是表锁。
kis龍 2019-08-07
  • 打赏
  • 举报
回复
RR 隔离级别

begin tran;update emp set ename = 'lisi' where empno = 9002; -- 这里会所表, 不是行锁, 没有 主键或索引, 不提交, 另一个事务会等待
另一个窗口 不开事务是可以操作的,
二月十六 2019-08-04
  • 打赏
  • 举报
回复
引用 1 楼 奥萨马-本-拉登 的回复:
咋还没人回复捏
兄弟你得结贴啊,之前回复了你俩帖子,后边都没信了
二月十六 2019-08-04
  • 打赏
  • 举报
回复
未提交事务是会造成锁表的,整个表都会锁上
jiaoshiyao 2019-08-04
  • 打赏
  • 举报
回复
引用 2 楼 二月十六 的回复:
[quote=引用 1 楼 奥萨马-本-拉登 的回复:] 咋还没人回复捏
兄弟你得结贴啊,之前回复了你俩帖子,后边都没信了[/quote]结了
jiaoshiyao 2019-08-03
  • 打赏
  • 举报
回复
咋还没人回复捏

56,914

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧