MySQL的MyISAM实现事务:
* MyISAM实现事务必须要使用到表锁,伪事务实现,其中操作有点繁琐
事务应用场景:
一般使用在计算金钱,订单、购物车方面计算
事务的概念:
* 事务处理可以确保,除非事务在单元内(代码区域块内)的所有操作完成,代码才完全完成,否则永远无法更新到最新数据(也就是事务没有被提交成功之前,代码是无法更新到最新数据)。
* 通过一组操作,要么一起完成,要么一起失败(一块代码区域内的所有逻辑操作,其中有某一处失败了,则全部失败,必须全部成功执行才能成功)。
* 事务代码区域内所有逻辑,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)
1. 原子性:(A)
* 对于数据修改,要么成功执行,要么所有失败。(一块代码区域内,所有逻辑必须执行成功并且没有任何错误,事务才能成功,其中某个失败则所有失败)。
2. 隔离性:(C)
* 当事务还没被提交之前,其中回话访问不了操作流程
3. 一致性:(I)
* 事务发生前发生后,数据必须相匹配。(也就是数据提交之前,数据必须跟日志中的数据项匹配,才能保证数据的一致性)
4. 持久性:(D)
* 当一个事务被提交后,数据是永远被保存着,不会丢失(一旦事务开启后,就会保存在日志中,事务一旦被提交,就会刷新到磁盘中,这样保证数据永远不会被丢失)
MySQL事务的日志理解:
MySQL在进行事务操作处理的时候,都是使用日志先行操作(MySQL的日志都是大于数据)也就是在开启事务的时候,都是先写入到日志中,一旦事务被提交后,就会被刷新磁盘中,
可通过命令查询引擎的状态:
show engine innodb status\G;
最后:
出了记录日志以外,MySQL还记录了一个撤销日志(undo log 撤销日志)。
一旦事务开启或提交后,就会默认保存在(redo log 事务日志中),并且保存在(undo log 撤销事务日志中)。
一旦事务失败了,首先会查询undo log 撤销日志(undo log),并且回滚事务