Database - Transaction(待续)

1. 描述

用户定义的一系列操作,要么完全执行,要么完全不执行。是数据库的一个逻辑工作单位,由DBMS的事务子系统处理。

1. 语句有3条

  • BEGIN TRANSACTION
  • COMMIT
  • ROLLBACK

2. ACID

1. 一个逻辑工作单元要想成为事务,必须满足ACID(原子性、一致性、隔离性、持久性)特性:

  1. Atomicity 原子性:事务本身必须是原子工作单位,事务的操作要么全部成功,要么全部失败。

  2. Consistency 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

    • 数据库处于一致性状态:数据库只包含成功事务提交的结果
    • 事务操作全做或者全不做,数据库都处于一致性状态。可见一致性和原子性是密切联系的。
  3. Isolation 隔离性:隔离性对并发执行而言,一个事务的执行不能被其他事务干扰。一个事务内部的操作及使用的数据对其他并发事务是隔离的。并发执行的各个事务之间不能互相干扰。

  4. Durability持续性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。(也称为:Permanence)

2. 保证事务ACID特性是事务管理的重要任务,ACID可能遭到破坏的因素有:

  1. 多个事务并行运行时,不同事务的操作交叉执行。- - - - DBMS保证不影响事务原子性
  2. 事务在运行过程中被强行停止。 - - - - DBMS保证被终止的事务不留下任何影响

事务的并发控制(有事务在增删改)
1、DBMS并发控制的责任是:对并发操作进行正确的调度,保证事务的隔离性更一般,确保数据一致性。
2、并发操作带来的数据不一致性包括:丢失修改、脏读(读脏数据)、不可重复读、幻读(产生幽灵数据)。
1、丢失修改lost update:当两个或多个事务选择同一行,基于其最初选定的值进行更新数据时,会发生丢失修改问题。最后的更新将重写由其它事务所做的更新。
2、脏读(读了脏数据)dirty reads:事务T2读取了事务T1已经修改但还未commit的数据,事务T1回滚了数据;
3、不可重复度non-repeatable reads:(事务T1在一次事务中两次读取同一行数据)事务T1读取数据后,事务T2对数据进行了更新,当T1再次读取数据后,得到与前一次不同的值;
4、幻读(产生幽灵数据):(事务T1在一次事务中两次读取同一行数据)事务T1读取了某些(多条记录)记录,事务T2删除/插入了一些记录,当T1再次读相同条件的记录时,发现少了一些记录/多了一些记录。
我的话述
1. lost update:事务T1和T2同事修改相同的数据,T1先提交T2后提交,T2覆盖了T1的结果;
2. dirty reads:(T1读1次)事务T1读取了事务T2更新但未提交的数据,最终T2回滚了数据;
3. non-repeatable reads:(T1读2次,记录中的具体数据不同)事务T1先读取数据,事务T2更新了数据并提交,事务T1再次读取数据,结果与第一次读到的不同;
4. 幻影读 reads:(T1读2次,记录的数量不同)事务T1按条件读取一定记录,事务T2删除/插入了一些记录,T1再次读取记录,结果少了/多了一些记录;

隔离级别
√: 可能出现 ×: 不会出现

- 脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×

1. Read uncommitted:性能第1,但会脏读;
2. Read committed:只读被commit的数据,不会脏读;(大多数DBMS的默认隔离级别)
3. Repeatable read:可以重复读,读某些行记录时,其它事务不能修改那些记录,避免不可重复度;
4. Serializable:序列化,对一张表的所有增删改操作必须顺序执行,性能最差;

你可能感兴趣的:(数据库,事务)