Mysql—行锁

  • 行锁(InnoDB)

—mysql默认自动commit,oracle默认不会自动commit
在这里插入图片描述
为了研究行锁,暂时将自动commit关闭;
set autucommit = 0;

行锁,操作相同数据:
会话0:写操作
insert into linelock values(6,‘a6’);

会话1:写操作,同样的数据(发现锁住了,必须等到会话0 commit或rollback后,才能继续执行)
update linelock set name = ’ax’ where id = 6;

结论1:
1.如果会话X对某条数据a进行DML(增删改)操作(研究时:关闭了自动commit的情况下),则其他会话必须等待会话x结束事务(commit/rollback)后,才能对数据a进行操作。
2.表锁是通过unlock tables解锁,也可以通过事务解锁;行锁是通过事务解锁(commit/rollback)。

行锁,操作不同数据:
会话0:写操作
insert into linelock values(8,‘a8’);

会话1:写操作,不同的数据
update linelock set name = ’ax’ where id = 5;

结论2:
行锁,一次锁一行数据;因此如果操作的是不同数据,则不干扰。

行锁的注意事项:
a.如果没有索引,则行锁会转为表锁
b.行锁的一种特殊情况:间隙锁:值在范围内,但却不存在

行锁:
InnoDB默认采用行锁;
缺点:比表锁性能损耗大
优点:并发能力强,效率高
因此建议,高并发用InnoDB,否则用MyISAM

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值