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

1,事务特性:sql

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

(1)原子性:一个事物会包括不少操做,好比增删改,原子性就是要保证这些操做,要么所有成功,若是有一个失败,那么所有失败。并发

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

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

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

2,事务的隔离级别io

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

(1)读未提交:数据

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

(2)读已提交

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

(3)可重复读

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

(4)序列化

        这个是最严格的隔离级别,无论你啥操做,必须得按照严格的顺序执行,不会有任何并发发生,通常数据库不会采起这个级别

相关文章
相关标签/搜索