数据库事务及其隔离级别的通俗理解

目录

什么是事务?

事务的四大特性

事务的启动、结束

事务的隔离级别

READ UNCOMMITTED(读未提交)

READ COMMITTED(读已提交)

REPEATABLE READ(可重复读)

SERIALIZABLE(串行化读)


什么是事务?

         还是以最常见的“转账”为例。假设现在小王有1000块钱,小刘现在有1000块钱,小王要向小刘转500块钱,就需要有两个过程:一是从小王账户里扣除500块,二是在小刘账户上增加500块,对应执行以下两条语句:

UPDATE deposit SET money = money - 500 WHERE name = '小王';
UPDATE deposit SET money = money + 500 WHERE name = '小刘';

        那么此时就有个问题了:谁也无法保证在任何情况下两条语句都能执行成功,如果第一条语句执行成功,第二条语句执行失败,小王扣了钱,小刘钱却没增加,这样不就肯定会闹矛盾嘛!为了解决这个问题,就考虑通过一种方式,把这两条语句作为一个整体,要么都执行成功,要么就都执行失败,而这种方式,就是事务。

         简而言之,事务就是将一个或多个sql语句组成一个单元,这个单元作为不可分割的整体,要么执行成功,要么执行失败就回滚到执行前的状态。

事务的四大特性

事务的四大特性简称为ACID,分别是:

原子性(atomistic):一个事务是一个整体,不可再分割;
一致性(consistent):一个事务执行会使数据从一个一致状态切换到另一个一致状态,要么全部成功,要么全部失败;
隔离性(isolation):一个事务的执行不受其他事务的干扰;
持久性(durability):一个事务一旦提交,就会永久改变数据库的数据。

事务的启动、结束

        事务主要分为两种:一种是隐式事务,是指那些没有明显启动、结束标识的事务,如我们常使用的UPDATE、DELETE等语句实际上就是一个事务,语句执行之前隐式开启事务,语句结束后隐式结束事务;相应的第二种自然就是有明显启动与结束标识的事务了。

       对于事务的启动,在MySQL中,可以显式地通过begin;或者start transaction;语句来开启事务,如果没有这些显式语句,在执行每条语句时事务也会自动启动;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值