+ +

数据库的控制功能主要指对数据库中数据的管理和维护,确保数据的安全性、完整性和一致性。数据库控制功能主要包括:并发控制、性能优化、完整性约束、以及备份与恢复。

+

一、并发控制

1. 事务

DBMS 运行的基本工作单位是事务,事务是用户定义的一个数据库读写操作序列,这些操作序列要么全做,要么全不做,是一个不可分割的工作单位。

+

事务具有以下四个基本特性,通常被称为ACID 特性

+
    +
  • 原子性(Atomicity):事务中的所有操作是一个不可分割的整体,要么全部完成,要么全部不完成,不能部分地完成。一旦某一步执行失败,就会全部回滚到初始状态。
  • +
  • 一致性(Consistency):事务必须使数据库从一个一致性状态转换到另一个一致性状态。这意味着事务执行过程中和执行结束后,数据库中的数据必须满足所有预定义的规则和约束。
  • +
  • 隔离性(Isolation):一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的事务之间不会相互影响。多个事务并发运行,但看上去像串行调度执行一样。
  • +
  • 持久性(Durability):一旦事务被提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。
  • +
+ + +

一致性是事务 ACID 四大特性中最重要的属性,而 原子性、隔离性和持久性,都是作为保障一致性的手段

+

2. 数据不一致

如果数据不一致,那么在并发“读 - 写”或并发“写 - 写”的场景,容易出现以下问题:

+

(1) 修改丢失

T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。

+ + + + + + + + + + + + + + + + + + + + + + + +
T1T2
读 A=10
读 A=10
A=A-5,写回
A=A-8,写回
+

T1 对 A 的修改被 T2 覆盖,T1 的修改不起作用。

+

(2) 脏读

T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
T1T2
读 A=20
A=A+50,写回
读 A=70
rollback
A=20,写回
+

T1 对 A 进行修改,但之后回滚撤销,T2 读取的数据与数据库中不一致,是错误的数据(脏数据)。

+

(3) 不可重复读

T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
T1T2
读 A=20
读 B=30
计算 A+B=50
读 A=20
A=A+50,写回
读 A=70
读 B=30
计算 A+B=100
+

T1 读取数据并进行计算,T2 更新了数据,T1 再次读取数据,然而计算结果不一致。

+

(4) 幻读

T1 读取某个范围的数据,T2 在这个范围内插入或删除数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。

diff --git a/archives/2024/10/index.html b/archives/2024/10/index.html index 908fa7a..ba402e9 100644 --- a/archives/2024/10/index.html +++ b/archives/2024/10/index.html @@ -243,7 +243,7 @@

-

数据库的并发控制、性能优化、以及备份和恢复

+

数据库的并发控制、性能优化、以及备份和恢复

阅读全文 diff --git a/archives/2024/index.html b/archives/2024/index.html index 0e55e5b..1e2ec5b 100644 --- a/archives/2024/index.html +++ b/archives/2024/index.html @@ -243,7 +243,7 @@

-

数据库的并发控制、性能优化、以及备份和恢复

+

数据库的并发控制、性能优化、以及备份和恢复

阅读全文 diff --git a/sitemap.xml b/sitemap.xml index 8ce4ba6..ec7c3a2 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,7 +2,7 @@ - https://www.stepbystep.asia/2024/%E8%BD%AF%E8%80%83%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%BB%BA%E6%A8%A1/ + https://www.stepbystep.asia/2024/%E8%BD%AF%E8%80%83%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%8E%A7%E5%88%B6%E5%8A%9F%E8%83%BD/ 2024-10-29 @@ -11,9 +11,9 @@ - https://www.stepbystep.asia/2024/%E8%BD%AF%E8%80%83%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%8E%A7%E5%88%B6%E5%8A%9F%E8%83%BD/ + https://www.stepbystep.asia/2024/%E8%BD%AF%E8%80%83%E6%9E%B6%E6%9E%84%E2%80%94%E2%80%94%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%BB%BA%E6%A8%A1/ - 2024-10-28 + 2024-10-29 monthly 0.6 @@ -300,14 +300,14 @@ - https://www.stepbystep.asia/tags/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C/ + https://www.stepbystep.asia/tags/AFL/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/AFL/ + https://www.stepbystep.asia/tags/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C/ 2024-10-29 weekly 0.2 @@ -335,42 +335,42 @@ - https://www.stepbystep.asia/tags/Docker/ + https://www.stepbystep.asia/tags/blog/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/%E5%AE%B9%E5%99%A8/ + https://www.stepbystep.asia/tags/web/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/blog/ + https://www.stepbystep.asia/tags/Hexo/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/web/ + https://www.stepbystep.asia/tags/tranquilpeak/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/Hexo/ + https://www.stepbystep.asia/tags/Docker/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/tranquilpeak/ + https://www.stepbystep.asia/tags/%E5%AE%B9%E5%99%A8/ 2024-10-29 weekly 0.2 @@ -405,42 +405,42 @@ - https://www.stepbystep.asia/tags/IntelPin/ + https://www.stepbystep.asia/tags/Python/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/%E6%B1%A1%E7%82%B9%E5%88%86%E6%9E%90/ + https://www.stepbystep.asia/tags/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B/ + https://www.stepbystep.asia/tags/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1/ + https://www.stepbystep.asia/tags/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8C%83%E5%BC%8F/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%8C%83%E5%BC%8F/ + https://www.stepbystep.asia/tags/IntelPin/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/tags/Python/ + https://www.stepbystep.asia/tags/%E6%B1%A1%E7%82%B9%E5%88%86%E6%9E%90/ 2024-10-29 weekly 0.2 @@ -498,14 +498,14 @@ - https://www.stepbystep.asia/categories/%E5%AE%89%E5%85%A8/%E6%A8%A1%E7%B3%8A%E6%B5%8B%E8%AF%95/ + https://www.stepbystep.asia/categories/%E5%AE%89%E5%85%A8/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/categories/%E5%AE%89%E5%85%A8/%E7%AC%A6%E5%8F%B7%E6%89%A7%E8%A1%8C/ + https://www.stepbystep.asia/categories/%E5%AE%89%E5%85%A8/%E6%A8%A1%E7%B3%8A%E6%B5%8B%E8%AF%95/ 2024-10-29 weekly 0.2 @@ -526,21 +526,21 @@ - https://www.stepbystep.asia/categories/%E5%BC%80%E5%8F%91/ + https://www.stepbystep.asia/categories/web/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/categories/web/ + https://www.stepbystep.asia/categories/%E5%BC%80%E5%8F%91/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/categories/%E5%AE%89%E5%85%A8/%E6%B1%A1%E7%82%B9%E5%88%86%E6%9E%90/ + https://www.stepbystep.asia/categories/%E5%BC%80%E5%8F%91/Linux/ 2024-10-29 weekly 0.2 @@ -554,28 +554,28 @@ - https://www.stepbystep.asia/categories/%E8%BD%AF%E8%80%83/ + https://www.stepbystep.asia/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/Python/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/categories/%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80/Python/ + https://www.stepbystep.asia/categories/%E8%BD%AF%E8%80%83/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/categories/%E5%BC%80%E5%8F%91/%E7%88%AC%E8%99%AB/ + https://www.stepbystep.asia/categories/%E5%AE%89%E5%85%A8/%E6%B1%A1%E7%82%B9%E5%88%86%E6%9E%90/ 2024-10-29 weekly 0.2 - https://www.stepbystep.asia/categories/%E5%BC%80%E5%8F%91/Linux/ + https://www.stepbystep.asia/categories/%E5%BC%80%E5%8F%91/%E7%88%AC%E8%99%AB/ 2024-10-29 weekly 0.2 diff --git "a/tags/\346\225\260\346\215\256\345\272\223\350\214\203\345\274\217/index.html" "b/tags/\346\225\260\346\215\256\345\272\223\350\214\203\345\274\217/index.html" index 1dad474..6e0fbc7 100644 --- "a/tags/\346\225\260\346\215\256\345\272\223\350\214\203\345\274\217/index.html" +++ "b/tags/\346\225\260\346\215\256\345\272\223\350\214\203\345\274\217/index.html" @@ -243,7 +243,7 @@