数据库事务与锁关系心得【mysql】

 

         锁、MVCC可以帮助解决数据库事务遇到的问题。事务协助管理释放锁。实际上锁更多是灵活解决业务上的问题,比如是否使用锁,用什么锁类型。锁是性能与数据准确的权衡,事务是性能与数据一致的权衡。通常,稍复杂的事务通过使用锁来保证数据准确。

        开发过程中,事务控制越小越好,锁范围控制越小越好,以达到提高性能。spring的transactionTemplate可以灵活控制事务的范围,很多大厂、金融公司选择使用。

 

一、tips

1、数据库事务隔离级别有read uncommit, read commit,reapeat read,串行。解决的问题:脏读,不可重复读,幻读。

2、锁有共享锁也称读锁、排他锁也称写锁。按加锁位置分为:表锁、行锁、间隙锁、next-key锁。

3、事务隔离级别、记录行数,影响加锁的类型。

4、start transation不会加锁。sql语句显式或隐式加锁。

5、事务提交或回滚辅助释放锁。单条sql也算隐式事务的话。

6、简单selec为快照读,select * for update为当前读。

7、事务作用:保证数据一致(ACID)、释放锁。锁作用:保证数据准确。

 

二、验证

  • start transation不会加锁。sql语句显式或隐式加锁。

窗口A开启事务,执行select for update

窗口B不开启事务,执行update。窗口B阻塞,直到超时。表明加锁时机在sql上,锁释放由事务控制。

 

  • 简单selec为快照读,select * for update为当前读。

窗口A,开启事务,执行select *

窗口B,开启事务,执行update,并commit

这个时候,窗口A分别执行select 和selec for update,结果不一样。表明前者为快照读,后者为当前读。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木江南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值