数据库事务的四大特性和隔离级别

最近经常会被问到这个问题,以便自己日后查漏补缺。

一.事务的概念以及事务的四大特性

事务(Transaction):简单的说就是对数据库进行的一个完整的操作,这个操作要么全部成功,要么全部失败,不能够被分割。
事务的四大特性(ACID):
原子性(Atomicity): 不可分割,要么全部执行,要么全部失败回滚,失败回滚后,数据库的状态与改事务执行之前的数据库状态相同。

一致性(Consistency): 在事务执行前后,整个数据库处于一致状态,保持数据的完整性;比如,A有500元,B有500元,A与B之间进行转账,在没有第三方介入的情况下,无论A和B之间进行多少次的转账,他们两个的总金额都应该是1000元

隔离性(Isolation): 即在事务存在并发的情况下,每个事务之间感觉不到对方的存在,互不干扰。

持久性(Durability): 事务成功执行完后,对数据库的改变是永久、不可改变的,即便系统崩溃,也能回到这个成功的状态。

二.事务的隔离级别

读未提交(Read Uncommitted) : 又被称为脏读,即一个事务读到另一个事务还没有提交的数据;这是MySQL数据库中隔离级别最低的,可能出现的问题有脏读、不可重复读、幻读

读已提交(Read Committed) : 又称不可重复读,即一个事务读到了另一个事务已经提交的数据,比如;当第一个事务在多次读取某一条数据时,第二个事务执行,对该数据进行了修改,那么第一个事务就会发现第二次读到的结果和之前不相同。为Oracle、Sql Server等数据库的默认隔离级别,可能出现的问题有不可重复读、幻读

可重复读(Repeated Read) : 又称幻读,Mysql默认的隔离级别,幻读是事务非独立执行时发生的一种现象。例如事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻读。 幻读和不可重复读都是读取了另一条已经提交的事务(这点和脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)

串行化(Serializable): MySQL数据库中隔离级别最高、最严格,避免了脏读、不可重复读、幻读的发生,因为它要求将事务串行起来运行,不允许并发执行。但相应的,对数据库的性能会造成一定的影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值