MySQL的事务隔离级别可以解决什么问题

  

一、事务的原则

事务要满足酸原则,也就是:

1。原子性(原子性):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出的错,会回滚到事务开始前的状态,所有的操作就像没有发生一样,也就是说事务是一个不可分割的整体。


2。一致性(一致性):事务开始前和结束后,数据库的完整性约束没有被破坏。比如向B转账,不能出现一个扣了钱,B却没收到。


3。隔离性(隔离):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如一个正在从一张银行卡中取钱,在一个取钱的过程结束前,B不能向这张卡转账。


4。持久性(耐久性):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。


二、事务并发造成的问题

1。脏读:事务一个读取了事务B更新的数据,然后B回滚操作,那么一个读取到的数据是脏数据。比如:

事务B把用户的年龄更新成22岁,但是事务还未提交。此时事务一个来读用户的年龄,读到了22岁,然后去做自己的处理,之后事务B把用户的年龄回滚到21岁。这个例子中事务一读到的22岁就是脏数据。


2。不可重复读:事务多一次读取同一数据,事务B在事务多一次读取的过程中,对数据作了更新并提交,导致事务多一次读取同一数据时,结果不一致。比如:

事务B先把用户的余额更新为100元,事务一个来读的时候读到的是100元,然后事务B又把余额更新为90元,此时事务一个来读的时候读到的就是90元,也就是事务一读到的数据前后不一致。


3。幻读:事务一个对表中的数据进行了修改,涉及到表中的全部行。同时,事务B也修改这个表中的数据,向表中插入一行新数据。那么,事务一个发现表中还有自己没有修改的行,就好象发生了幻觉一样,比如:

先把所有人的余额清零,同时,B往表中插入了一条余额为100的数据。提交以后,发现竟然还的有100。就好像发生了幻觉一样,这就叫幻读。


三,MySQL的事务隔离级别

MySQL的事务隔离级别有四种:

1。读未提交(读未提交):能读到未提交的数据。会出现脏读,不可重复读,幻读。


2。读已提交(读取提交):读已提交的数据。会出现不可重复读和幻读。


3。可重复读(可重复读):MySQL默认的事务隔离级别,查询的都是事务开始时的数据。只会出现幻读。


4。串行读(序列化):完全串行化读,每次都会锁表,读写互相阻塞。最高隔离级别,不会出现脏读,不可重复读,幻读。但会大大影响系统的性能,一般不用。

  

MySQL的事务隔离级别可以解决什么问题