惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
GbyAI
GbyAI
B
Blog
F
Fortinet All Blogs
T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
A
About on SuperTechFans
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
MyScale Blog
MyScale Blog
B
Blog RSS Feed

Jiajun的技术笔记

你好,2026! TiDB 源码阅读(六):TiDB Coprocessor 源码解析 性能优化的核心思想 TiDB 源码阅读(五):索引 TiDB 源码阅读(四):AST、逻辑计划、物理计划 CockroachDB Serverless Architecture podman 无故退出 Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal Replace docker with podman Using xmonad with xfce4 A RC script for freebsd frpc 自己动手写一个k8s controller AI 会取代你的(编程)岗位吗? 自建DERP服务器提升Tailscale连接速度(使用Nginx转发) 自动升级Docker容器 再读《程序员修炼之道-从小工到专家》 让浏览器下载文件 再读《软件随想录》/《黑客与画家》/《软技能》 HTTP 压力测试中的 Coordinated Omission 2的补码 编程语言中的 context 是什么? flutter macOS 构建出错 Flatpak 使用小记 Golang CAS 操作是怎么实现的 PostgreSQL 当MQ来使用 Clash 结合 工作VPN 的网络设计 使用 PostgreSQL 搭建 JuiceFS PostgreSQL 配置优化和日志分析 有GitHub Copilot?那就可以搭建你的ChatGPT4服务 窗口函数的使用(以PG为例)
Web开发系列(十):事务和锁
Jiajun Huang · 2017-10-19 · via Jiajun的技术笔记

事务

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

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

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

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

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

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

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

参考: