数据库事务特性以及隔离级别

旧巷老猫 提交于 2019-12-01 20:27:35

1,事务特性:

数据库的事务特性有四个,分别是原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability),也就是传说中的ACID。他们大概的意思就是:

(1)原子性:一个事物会包括很多操作,比如增删改,原子性就是要保证这些操作,要么全部成功,如果有一个失败,那么全部失败。

(2)一致性:事务执行前和事务执行后应保持库一致,感觉像没说一样,一个例子,一个事物的操作为将A表的数据存到B表中,那么当事务执行完毕之后,必须保证A+B跟事务执行前的A+B值是一样的

(3)隔离性:事务和事务之间的特性,两个事务相互隔离,互相不影响

(4)持久性:事务执行完毕之后,表中的数据就持久下来,不会自己没事就消失了

2,事务的隔离级别

    事务的隔离级别,指的就是事务的四个特性中的隔离性的级别,按照隔离的强度区别,分为四个级别

(1)读未提交:

        指的是一个事务可以读出另一个事务未提交的结果,举个例子:发工资了,经理准备给小王发50000块钱,执行了一个sql,将50000块钱存到了小王的表里,小王这时候看到了很开心,觉得瞬间从屌丝变成了高富帅,这时候经理发现不对,多打了一个0!!于是就执行了一个sql,修改了50000变成了5000,然后提交了事务,这时候小王取钱,只能取到5000了。

(2)读已提交

        指的是事务只能读到别的事务提交后的结果,也就是说别的事务在执行彼此是隔离的,这个隔离级别会产生一个问题就是脏读,比如你开启一个事物读取一个数据库数据的时候,事务没有提交,另一个事务正在修改你读的这条数据并且提交事务,当你再读取的时候就会发现,跟上一次读的结果不同,因为你读的数据被修改了

(3)可重复读

        开启一个事物A读取某个范围的数据,返回结果但是并不提交事务,另一个事务对读取的这个范围的数据进行修改并且提交事务,这时候,事务A中再次再次读取数据的时候,数据不变,跟第一次读取的一致,但是如果此时另一个事务在这个范围内插入数据的时候,事务A再次读取数据会跟之前读取的不一致,这就是幻读,INNODB存储引擎已经解决了这个问题

(4)序列化

        这个是最严格的隔离级别,不管你啥操作,必须得按照严格的顺序执行,不会有任何并发发生,一般数据库不会采取这个级别

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!