目录
什么是事务?
还是以最常见的“转账”为例。假设现在小王有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;语句来开启事务,如果没有这些显式语句,在执行每条语句时事务也会自动启动;