**
一、什么叫做事务
**
事务是数据库操作的最小工作单元,指作为单个逻辑工作单元的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行,事务是一组不可再分割的操作集合。 事务就是并发控制的单位,是用户定义的一个操作序列。
**
二、事务具备的特性
**
ACID属性
四大特性:
A:原子性(Atomicity)
事务是一个不可分割的整体,是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。
C:一致性(Consistency)
事务执行的结果必须是从数据库从一个一致性状态转换到另一个一致性状态。
I:隔离性(Isolation)
一个事务的执行不能被其他事务干扰,并发执行的各事务是互不相干的。
D:持久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
**
**
三、不考虑隔离性会产生的三个问题
**
1.脏读:一个事务读到另一个事务未提交的更新数据。
2.幻读:例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。
3.不可重复读:比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读。
四、事物的隔离级别
**
1.default:默认的隔离级别,使用数据库默认的事务隔离级别
2:读未提交:一个事务读到另一个事务未提交的更新数据。(读取了未提交的数据,引发脏读)。
3:读已提交: 这是大多数数据库系统默认的隔离级别,不是MySQL默认的,只能看见已经提交事务所做的改变,引发不可重复读。(不可重复读: 同一事务执行完全相同的select语句时可能看到不一样的结果。期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读。)*
4.可重复读: 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,看到同样的数据行,上锁。此级别可能出现的问题-幻读。
5.可串行化:*这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。*简言之,它在每个读的数据行上加上共享锁。
可能导致大量的超时现象和锁竞争。