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)序列化
这个是最严格的隔离级别,不管你啥操作,必须得按照严格的顺序执行,不会有任何并发发生,一般数据库不会采取这个级别
来源:oschina
链接:https://my.oschina.net/u/1169535/blog/781974