关于数据库:事务基础认识

2次阅读

共计 1417 个字符,预计需要花费 4 分钟才能阅读完成。

事务是什么?

事务是数据库里 最小 解决单位的 工作汇合 。能够是一条 SQL 语句,也能够是多个 SQL 的汇合操作。它能够保障这些工作汇合要么全副 都执行完 ,要么 都不执行,不会处于一个中间状态。

数据库是面向 多线程多用户 设计的,同一时刻会被多个程序读取或批改。对于并发操作,须要思考对同一资源的访问控制。

而事务就是用来保障 数据完整性 的。这里的完整性包含逻辑上的完整性,即咱们的预期执行后果;也包含了物理上的完整性,比方对于执行胜利的事务即便重启了也不会失落执行后果。

事务的应用

事务的整体流程次要波及到几个状态点:

(1)开始事务:BEGIN TRANSACTION;

(2)提交事务:COMMIT;

(3)回滚事务:ROLLBACK;

个别的,当咱们在执行一条 SQL 语句时就曾经默认帮咱们开启了事务。若执行胜利,则会提交事务。此时的执行后果将会被长久化到硬盘上,即时重启也不会失落执行后果。

回滚事务次要用于在批量执行 SQL 并且尚未提交事务时,容许撤回后面所有的 SQL 操作。

事务的 ACID

后面提到过,事务是用来保障数据完整性的,为了达到这个目标事务须要保障上面 4 个个性:

1、原子性(Atomicity)

一个事务是一个不可分割的单位,因而在一个事务里的所有操作要么全副失效,要么全副不失效。

2、一致性(Consistency)

也能够了解为是预期状态的正确性,即从一个正确的状态到另一个正确的状态,这里的状态往往是由业务来定义的。

比方转账中的一个扣钱一个加钱,是咱们规定的一个 数据流转 ,那么执行前的账户余额和执行胜利后的账户余额就得满足咱们的 加减个性。只有满足了,就是达到一致性的。

3、隔离性(Isolation)

数据库是容许多个事务 并发 执行的,每个事务在执行时现实状态是互不影响。然而要达到这个成果就得 串行 执行事务,这样并发能力也会大大 升高

因而,为了 兼顾 执行效率,将相互影响的水平分为了 4 个隔离级别:

1)未提交读:

    举个例子,当事务 A 对表 1 进行 更新 操作后,有事务 B 读取 了更新后的数据,前面又因为某种原因,事务 A 进行了 回滚

那么,对于事务 B 来讲就依赖了一个 有效 的回滚数据,从而前面所做出的决策,也不肯定正确了,这就是所谓的 脏读,即未提交读隔离级别,此级别数据一致性最差,但并发性最好。

2)已提交读:

    如果想避免脏读,就须要期待其余事务 提交 后再进行读取操作。避免了有效的回滚状况,这就是已提交读隔离级别。

3)可反复读:

    已提交读的隔离级别思考到了数据回滚的有效性,却无奈阻止事务的 屡次提交

比方事务 A 一直的对表进行批改提交,那么事务 B 就会在不同的工夫点读取到不同的数据,为了让事务 B 在执行期间读取的数据都是 统一 的,就有了可反复读的隔离级别。

保障了事务 B 在执行期间,其余事务 不得 进行 改操作。

4)可串行化:

    可反复读隔离级别保障了事务执行期间读取的一致性。然而,并 不包含插入、删除 操作。

即会呈现读取多数据或少数据的状况,这种景象叫做 幻读

为了解决幻读,只得进行 串行化 执行,能力相互不影响。而此时的事务并发性是最低的。

4、长久化(Durability)

提交的事务是 永久性 的,一旦事务执行胜利,那么即时进行重启了,也是一样的执行后果(当然,前提是磁盘文件没有损坏)

总结

事务的 ACID 个性保障了数据的完整性,其中事务的隔离级别,数据一致性越高,并发能力就越差,须要咱们在理论开发中依据理论的场景抉择。例如日志记录的读取,即便是脏读对总体影响也是不大的。

正文完
 0