Web开发系列(十):事务和锁

栏目: 数据库 · 发布时间: 5年前

内容简介:事务,有哪四个特性?想必十有八九在面试中问过这个问题:ACID 是数据库事务满足的四个特性,在哪些地方需要用到事务呢?例如在数据库中并发更新一个商品的点赞数,通常的做法是:如果这中间存在并发,而恰好CPU调度到另一个进程中执行,数据就有可能紊乱。事务便是因此而生的,事务保证了一系列动作要么全都被 执行,要么全都没有执行。

事务

事务,有哪四个特性?想必十有八九在面试中问过这个问题:

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束
  • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行
  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中

ACID 是数据库事务满足的四个特性,在哪些地方需要用到事务呢?例如在数据库中并发更新一个商品的点赞数,通常的做法是:

  • 取出当前的点赞数
  • +1
  • 把+1之后的值写入数据库

如果这中间存在并发,而恰好CPU调度到另一个进程中执行,数据就有可能紊乱。事务便是因此而生的,事务保证了一系列动作要么全都被 执行,要么全都没有执行。

为了保证并发更新的数据准确性,我们就需要了解到锁这个概念,即,想要修改这个数据,必须要先持有锁,锁的持有者可以更新数据, 其他的只能等待下一次夺取锁。

锁在实现方式上分为乐观锁和悲观锁,乐观锁即认为冲突很少发生,所以每次都会先复制一份先前的数据,记录下时间戳,等到更新数据 的时候,则检查数据是否已经被更改过,如果没有,则更新,否则则回滚,参见MVCC。而悲观锁则相反,采用一种相对保守的策略,悲观锁 认为冲突是极有可能大概率发生的,所以在更新数据之前,一定要先拿到锁才会开始。

参考:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Kubernetes权威指南

Kubernetes权威指南

龚正、吴治辉、王伟、崔秀龙、闫健勇、崔晓宁、刘晓红 / 电子工业出版社 / 2016-10 / 99

Kubernetes是由谷歌开源的Docker容器集群管理系统,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能。《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版)》从一个开发者的角度去理解、分析和解决问题,囊括了Kubernetes入门、核心原理、实践指南、开发指导、高级案例、运维指南及源码分析等方面的内容,图文并茂、内容丰富、由浅入......一起来看看 《Kubernetes权威指南》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具