MySQL之事务
什么是事务? 事务是一个或一组数据库操作的集合。 事务的ACID 原子性:事务要么都做,要么都不做。如果有一个操作执行失败,其余操作必须取消执行。 一致性:事务必须从一个一致性状态变到另一个一致性状态,它和原子性是密不可分的。如果一个事务是将A的值转移到B,那么B增加的同时A必须得减少一致的数量 隔离性:即使是在并发条件下,事务也不可以被其他事务所干扰 持久性:一个事务提交成功后,对数据的改变就应该是永久的了,不可以被其他操作或故障所影响 MySQL是通过WAL方式,来保证数据库事务的一致性和持久性 WAL(Write-Ahead Logging)是一种实现事务日志的标准方法,具体而言就是: 1、修改记录前,一定要先写日志; 2、事务提交过程中,一定要保证日志先落盘,才能算事务提交完成。 通过WAL方式,在保证事务特性的情况下,可以提高数据库的性能。 日志文件:undo和redo undo用来存放修改前的数据,redo用来存放修改后的数据 假设有A、B两个数据,值分别为1,2,开始一个事务,事务的操作内容为:把1修改为3,2修改为4,那么实际的记录如下(简化): A.事务开始. B.记录A=1到undo log. C.修改A=3. D.记录A=3到redo log. E.记录B=2到undo log. F.修改B=4. G.记录B=4到redo log. H.将redo