关于数据库事务和锁的一些理解

事务

  1. Atomic 原子性
    操作要么都执行,要么都不执行.
  2. Consistency 一致性
    数据不论是否回滚,都要保证一致性
  3. Isolation 隔离性
    事务不能看到其他事务的中间数据
  4. Durability 持久性
    操作一旦发生,其修改时持久的.

事务的并发问题

  1. 脏读
    读取到的是别人未提交的已修改数据,可能回滚
  2. 不可重复读
    两次读取,数据不同
  3. 幻读
    有新插入记录

数据库隔离级别

  1. 读未提交
  2. 读提交
    解决脏读
  3. 重复读
    解决脏读,不可重复读
  4. 序列化
    全部解决

1.悲观锁

每次拿数据都觉得别人会改,对世界怀着深深的危机感.
所以一拿数据就加锁,别人再想拿就会阻塞在这里.

分为以下几类:
读锁,写锁,行锁,表锁

读锁
也称共享锁(share lock) (S锁)
加锁后只允许读取数据,读取完毕立即释放.

在数据库语句后加holdlock

写锁
又称排他锁 (Exclusive lock) (X锁)
只能由一个事务持有

在数据库语句后加 for update

行锁
当知道更新的是哪几行,数据库就是行锁,
比如指定的更新的主键id

表锁
当不知道更新哪几行,比如指定比较字段可能有多个行满足,就是表锁

2.乐观锁

每次拿数据都很乐观,不加锁,只是在提交的时候看看数据是否发生修改.

版本号方式
比对原来数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值