数据库事务

事务

1、什么是事务

在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。
为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:
当它全部完成时,数据的一致性可以保持,
而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态

2、事务的ACID(acid)属性

  • 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
  • 隔离性(Isolation)事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

3、并发可能产生的问题

  • 脏读:
    一个事务读取另外一个事务尚未提交的数据
  • 不可重复读:
    其他事务的操作导致某个事务两次读取数据不一致

    不可重复读,针对已经提交的数据。2.两次或多次读取同一条数据

  • 幻读:
    其他事务的数据操作导致某个事务两次读取数据数量不一致。例如:
    对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.

    幻读针对已经提交的数据。2.两次或多次读取不同行数据,数量上新增或减少

4、事务的隔离级别

隔离级别 描述说明
none 无事务
READ_UNCOMMITTED(读未提交数据) 脏读、不可重复读、幻读,3种情况都可能会发生
READ_COMMITTED(读已提交) 只允许读取已提交的数据,既不可能发生脏读,有可能发生不可重复读和幻读
REPEATABLE_READ(可重复读) 确保事务可以多次从一个字段读取相同的值,在这个事务持续期间,禁止其他事务对这个字段的更新。所以可以避免脏读和不可重复读,但幻读还是可能发生
SERIALIZABLE(直译为串行事务) 保证不读脏,可重复读,不可幻读,事务隔离级别最高

慢慢更新

-------------本文结束 感谢您的阅读-------------