(MySQL死锁认识一)事务的基本知识

在讨论死锁之前,我们首先要了解事务、隔离级别、数据库锁等相关基本知识,否则,分析并解决死锁问题就无从谈起

首先我们先看看数据库事务的基本概念

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成

对于数据库事务来说,有四个基本的特性,简称为ACID

1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。 

2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。

3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

事务的ACID特性是由关系型数据库(DBMS)来实现的,DBMS采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所作的更新,如果某个事务在执行过程中发生错误,就可以根据日志撤销事务对数据库已做的更新,使得数据库回滚到执行事务前的初始状态。

对于事务的隔离性,那么就需要提到SQL的隔离级别,SQL中默认有四种隔离级别


4种隔离级别

1、 脏读:A,B两事务,A事务会读取到B事务未提交的数据,然后B因为某些原因回滚数据,所以A就读取了B没有提交的数据,也称脏数据。

2、 不可重复读:在A事务中对同一数据两次查询不一致,可能原因是在A事务提交之前B事务对该数据进行了操作

3、 幻读:类似于不可重复读,都是在一个事务周期内读的数据不一致,区别在于幻读是侧重于插入操作带来的影响,而不可重复读是编辑或者删除带来的影响

tips:不同的数据库的隔离级别有所区别,MySQL的默认隔离级别为可重复度,其他大多数数据库的默认隔离级别为读已提交



讲完了事务的基本特性和默认的隔离级别,我们对于事务已经有了基本的了解,接下来我们将了解数据库中和锁相关的知识

你可能感兴趣的:((MySQL死锁认识一)事务的基本知识)