事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。
ACID
Atomic(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)的英文缩写。
Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。
Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。
Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
隔离级别:
由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 四种。
Read uncommitted:读取到未提交的数据,即产生脏读现象。例如:发工资时,会计多打了3000,此时还未提交。你在查询工资时,发现多了3000,然后会计发现了问题,回滚事务,重新提交。你再次查询,发现工资正常。
Read committed:一个事务要等另一个事务提交后才能读取数据,读取正在被修改的数据,即产生不能重复读现象。例如:发完工资,你查询了工资卡有钱,然后在网上买个新款机械键盘,但是你家领导在这个时候将你的工资转到了自己卡里面。你发现交易失败,再次查询,工资卡没钱了!(因此在读数据时,如果对数据有update操作,读操作在update之后进行)
Repeatable read:在开始读取数据(事务开启)时,不再允许修改操作,但是会产生幻读现象(针对读时发生insert)例如:领导查账,看你本月流水,查了一下200块,心里觉得你还是很听话的。这时候你买了机械键盘,然后领导打印消费清单,发现3200 ,这就是幻读现象。
Serializable:序列化。最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读,但是此级别下数据库效率低下,影响数据库性能,一般不使用。
Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
个人公号:【排骨肉段】,可以关注一下。
网友评论