1.事务是什么?
事务transaction(简写tx),指在一个业务操作过程中,涉及数据库的增删改,将一些列的操作放入一个操作序列中,该序列中的操作要么一起成功,要么一起失败,保持业务数据的一致性;事务的开始和介绍由数据库来完成。
2.事务的特点(ACID):
事务特点包括:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durable);
1>原子性
指事务中的所有操作作为一个整体像原子一样不 可分割,要么全部成功, 要么全部失败。
2>一致性
指事务的执行结果必须使数据库从一个一致性状态到另一个一致性状态。(我理解就是业务操作中通过事务处理后,数据的一系列操作全部成功,由一个状态变到另外一个状态,该变化符合原子性,就是一致性);
3>隔离性
指数据库提供一定的隔离机制,多个并发执行的事务不会相互影响,其对数据库的影响和它们串行执行时一样(但不同的隔离级别决定了事务隔离性的独立程度);
4>持久性
指事务一旦提交,其对数据库数据的更新就是持久的。 任何事务或系统故障都不会导致数据丢失。
3.事务隔离级别:
1>什么叫事务隔离级别?
事务并发操作同一批数据的时候所导致的问题可以通过设置隔离级别来解决
2>事务隔离级别作用?
数据库的事务隔离机制是一种保证数据的一致性和完整性的重要手段。它通过对事务之间的隔离和限制来防止因并发操作而引发的问题。
3>事务隔离级别分类?
数据库中的事务隔离级别的分类(从低到高):
➢ 读未提交(READ UNCOMMITTED)
➢ 读已提交(READ COMMITTED)--Oracle默认级别
➢ 可重复读(REPEATABLE READ)--MySQL默认级别
➢ 串行化(SERIALIZABLE)
备注:隔离级别从小到大安全性越来越高,但是效率越来越低、
4>事务并发异常与隔离级别
<1>读未提交(Read Uncommitted):当前事务可以读取其他事务未提交的数据。这种隔离级别最容易产生脏读(Dirty Read)问题,即读取到未提交的数据,可能导致数据不一致。同时也可能发生不可重复读和幻读;
<2>读已提交(Read Committed):当前事务只能读取其他事务已经提交的数据。这种隔离级别可以避免脏读问题,但仍可能出现不可重复读(Nonrepeatable Read)和幻读(Phantom Read)问题。不可重复读指同一事务中多次读取同一数据出现不一致的情况。幻读指在同一事务下多次查询时,范围内新插入的行会影响到前面的查询结果。
<3>可重复读(Repeatable Read):Mysql默认的事务隔离级别。它保证了在同一个事务中多次读取相同记录的结果是一致的,即事务读取数据时会在事务中始终保持一致性,也就是无论其他事务修改了数据还是新增了数据,都不会影响该事务,解决了脏读和不可重复读问题。但是还是会产生幻读问题。
<4>串行化(Serializable):安全性最高的隔离级别,事务按序列化的方式执行,每个事务执行时,数据库会将该事务的所有操作按顺序排队执行,对其他事务的访问进行阻塞,避免了所有并发问题(脏读,不可重复读和幻读),但效率较低。
一般而言,不同的隔离级别对应不同的并发问题,应根据具体情况选择合适的隔离级别。在实际应用中,除非需求明确,否则不建议使用未提交读隔离级别。
总结:
1.讲了什么是事务
2.讲了事务的特点
3.事务并发异常可能发生的问题:脏读、不可重复读,幻读问题
4.四种事务隔离级别以及对应所可能导致的事务并发问题