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

推荐订阅源

A
Arctic Wolf
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
博客园 - 【当耐特】
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 三生石上(FineUI控件)
The Register - Security
The Register - Security
Google DeepMind News
Google DeepMind News
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
罗磊的独立博客
B
Blog RSS Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Heimdal Security Blog
O
OpenAI News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Vercel News
Vercel News
Help Net Security
Help Net Security
I
InfoQ
P
Privacy International News Feed
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
S
Secure Thoughts
G
GRAHAM CLULEY
NISL@THU
NISL@THU
SecWiki News
SecWiki News
S
Schneier on Security
D
Docker
T
Threatpost
Cloudbric
Cloudbric
C
CERT Recently Published Vulnerability Notes
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hacker News - Newest:
Hacker News - Newest: "LLM"
Security Latest
Security Latest
Recorded Future
Recorded Future
I
Intezer
MyScale Blog
MyScale Blog
阮一峰的网络日志
阮一峰的网络日志
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
美团技术团队

方寸之間

修复 Arch Linux 的内核缺失问题 - 方寸之間 安装定制化 Vim - 方寸之間 树莓派配置旁路由过程记录 - 方寸之間 Cloudflare Tunnel 不完全上手指南 - 方寸之間 解除 New Bing 地区和浏览器限制的方法 - 方寸之間 FRP 上手教程 - 方寸之間 深入理解 Linux nohup 命令 - 方寸之間 C++智能指针是什么 - 方寸之間 PGP 工作原理详解 - 方寸之間 如何恢复 Windows EFI 分区 - 方寸之間 Scaleway IPV6 server 申请及使用攻略 - 方寸之間 Arch Linux 升级系统提示签名无效 - 方寸之間 Arch Linux 音响有杂音的解决办法 - 方寸之間 Arch Linux 如何切换内核 - 方寸之間 Django 项目时区更改错误的解决方案 - 方寸之間 超简单的 Arch Linux + Windows 双启动教程 - 方寸之間 使用 UFW 配置 Linux 防火墙 - 方寸之間 Git 中的一个特殊 hash - 方寸之間 CRLF 和 LF 之间的区别与联系 - 方寸之間 DNS 的更新是如何工作的? - 方寸之間 浅析 Linux 的 cron 命令 - 方寸之間 如何快速查看 github 代码库中早期 commits - 方寸之間 黑科技:使用 GitHub 搭建自己的短链接服务 - 方寸之間 Build site with Franklin.jl - 方寸之間 iwd 的使用教程 - 方寸之間 超好用的 UML 工具推荐 - 方寸之間 ArchLinux 安装配置笔记 (Updated) - 方寸之間 如何将 Julia 添加到 Jupyter Notebook - 方寸之間 费曼技巧:最好的学习方式 - 方寸之間 How to Create Linux Desktop Entry - 方寸之間 Make a TODO robot with Github Actions - 方寸之間 C++继承 多态 虚函数 - 方寸之間 C++ inline 关键字详解 - 方寸之間 C++ Static 关键字详解 - 方寸之間 C++ type conversion notes - 方寸之間 Solution for _CRT_SECURE_NO_WARNINGS error - 方寸之間 IR Homework - 方寸之間 Customize Ubuntu themes, icons and Shell - 方寸之間 恢复右键菜单的新建命令 - 方寸之間 Hugo+Github 搭建个人博客 - 方寸之間
深入理解数据库事务 - 方寸之間
Mercas · 2021-06-20 · via 方寸之間

定义#

事务(Transaction)在计算机术语中是数据库管理系统执行过程中的一个由一个有限的数据库操作序列构成的逻辑单位。 在数据库中以一致模式完成的任何逻辑计算都称为事务。

性质#

数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:

  1. 提供可靠的工作单元,可以从故障中正确恢复并保持数据库一致,即使在系统故障的情况下(执行停止(完全或部分)并且对数据库的许多操作仍未完成且状态不明时)。
  2. 提供并发访问数据库的程序之间的隔离,以防止彼此的操作互相干扰。如果没有提供这种隔离,程序的结果可能是错误的。

当事务被提交给了数据库管理系统(DBMS),则 DBMS 需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

ACID 特性#

根据定义,数据库事务必须是原子的(它必须是完整的或没有任何影响)、一致的(它必须符合数据库中现有的约束)、隔离的(它不能影响其他事务)和持久的(它必须写入持久存储)。数据库从业者经常使用首字母缩写词 ACID 来指代数据库事务的这些属性。

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束,即系统获得有效的新状态或保持在先前状态。
  • 隔离性(Isolation):处理过程中事务与其他事务分开,一个事务的执行不应影响其他事务的执行。
  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中,即使在系统出现故障后系统仍保持有效状态。

示例#

张三要在商店购买 100 元的东西,当中至少包括两个操作:

  1. 张三账户减少 100 元
  2. 商店账户增加 100 元

原子性:

数据库管理系统就要确保以上两个操作(整个“事务”)都能完成,或一起取消;否则就会出现 100 元平白消失或出现的情况。

一致性:

交易完成,张三账户减少 100 元,商店账户增加 100 元

交易失败,张三账户和商店账户不变

隔离性:

如果张三在支付的同时,李四也在支付(是 50 元),那么即使李四取消支付,只要张三支付成功,商店账户也会增加 100 元,即不会影响张三的支付。

持久性:

交易完成,二者账户变化生效(写入数据库)

参考#

http://www.hollischuang.com/archives/898

https://zh.wikipedia.org/wiki/数据库事务

https://en.wikipedia.org/wiki/Database_transaction