请教一个 mysql 的锁的问题

2020-01-07 20:33:12 +08:00
 90928yao

id,a,b 三个字段 id 是 autoInc 主键,a 是唯一索引

俩行数据

1,first,xxx

2,second,yyy

第一个 session:

begin ;

delete from table where id=1 ;

第二个 sesion:

begin ;

replace into table ( a,b ) values (”second“,”test“)

第二个 session 被锁住了执行不了 有点不理解 session

http://www.fordba.com/lock-analyse-of-delete.html

按照这老哥说的就主键记录上的行锁,没有 gap

到底哪里锁住了

我猜是 a 的索引锁着了,但是说不出个所以然

半吊子求大佬指点

1442 次点击
所在节点    程序员
10 条回复
XDJI
2020-01-07 21:11:03 +08:00
rr 级别吗。。应该没锁呀 我试了下也没锁
luozic
2020-01-07 21:12:14 +08:00
啥引擎,mysql 有好几个引擎呢。
90928yao
2020-01-07 22:18:30 +08:00
@luozic innodb
90928yao
2020-01-07 22:31:36 +08:00
@XDJI 我又试了下 有的
crclz
2020-01-07 22:39:49 +08:00
你的第一个事务还没提交,那么所做出的更改(删除 [2,second,yyy] )在 Read Commited 和 Repeatable Read 隔离级别下都对第二个事务不可见。
90928yao
2020-01-08 08:50:22 +08:00
@crclz 那为什么 session 进入了锁等待的状态
90928yao
2020-01-08 08:50:39 +08:00
@XDJI 是 rr
90928yao
2020-01-08 08:53:35 +08:00
我擦 又可以了。。。真的啥都没动
crclz
2020-01-08 08:56:03 +08:00
看错了...我以为你删除的是第 2 行
XDJI
2020-01-08 09:43:09 +08:00
没有锁啊 第一个退化成行锁 第二个就是一个 insert 怎么看怎么没锁。。 昨晚我还试了的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/635907

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX