- Mysql事务概念
:数据库的事物是指一组sql语句注册的数据库逻辑处理单元
- 特点(ACID):
原子性(Atomicity):在事物的sql操作中,对数据的修改要么全部执行成功,要么全部执行失 败,它是基于日志的Redo/Undo机制。;
一致性(Consistent):一致性是指执行事物前后的数据库的状态要一致,可以理解为数据一致性(个人理解是数据结构不变,表结构变);
隔离性(Isalotion): 指事物的独立性,多个事物相互隔离,在并行状态下每个事务都有自己的完整数据空间,事务对数据进行更新时,要么数据的状态是另一个事务处理前的状态、要么是处理侯的状态,这个与事物设置的隔离级别有关;
持久性(Durable):指事物提交后,这个事物的状态(对数据的新增、更新)会被持久化到数据库中;
四个特点之间的关系:原子性、隔离性和持久性都是为了保障一致性而存在的,一致性为前者的最终目的。
- ACID的原理
- 通过预先写入日志保证: 原子性和持久性
- 原子性基于Redo/Undo机制:将所有数据的更新操作都写入日志;
- Undo log: 记录数据更新前的值;
- Redo log:记录数据块被修改后的值。
- 基于此特性:若数据库执行异常,可通过日志的方式,回滚数据,实现事务的一致性
- 而锁(locking)保证隔离性
- 一致性的事务隔离级别:
- 读未提交(READ UNCOMMITTED):此级别有产生脏读(读取到另一个事务未提交的数据)的隐患,一般是针对update的操作有此隐患;
- 读提交 (READ COMMITTED):意如其名,读取已经提交的内容;
- 可重复读 (REPEATABLE READ):解决了不可重复读和脏读的问题,但是有幻读(由于非线程安全,可以读取到后面插入的内容)的隐患,幻读隐患主要是针对insert操作;
- 串行化 (SERIALIZABLE):把事务的执行过程变为顺序执行。。
- 注:四个等级从上至下,隔离等级越来越高,但是由于锁的原因,性能越来越差
- 锁分类:分享锁/读锁(Shared Locks)、排他锁/写锁(Exclusive Locks) 、间隙锁、行锁(Record Locks)、表锁;
参考网址: Hive事务深度详解