mysql怎么回滚删除数据 mysql数据库如何回滚_mysql数据库回滚日志


对于开发工程师来说,数据库知识是必备的基础知识,因此对数据库的深入学习是必须的。无论是在工作中还是在面试中,数据库知识走占据了很重要的地位。而事务在数据库中,是一个极其重要的概念,因此搞清楚事务的相关的知识很有必要。

1、事物

事务(transaction) 是指一组数据库操作,要么全部成功,要么全部失败。

以“A账户向B账户转账100元”这个转账操作为例说明。A账户要给B账户转账,需要经历以下步骤:

  • 1.读取A账户余额;
  • 2.将A账户余额减去100元;
  • 3.更新A账户余额;
  • 4.读取B账户余额;
  • 5.将B账户余额加100元;
  • 6.更新B账户余额。

为了保证数据的一致性,这一组操作(以上的6个操作)要么全部完成,要么全部失败。这就是事务。

本文将探讨MySQL数据库的事务特性。MySQL数据库主要包括Server层和引擎层,MySQL的事务支持是在引擎层实现的。MySQL是一个支持多引擎的系统,但是并不是说所有的引擎都支持事务。例如,MySQL原生的MyISAM引擎就不支持事务,而InnoDB则支持事务,因此在MySQL数据库中,InnoDB取代了MyISAM,成为默认的存储引擎。


mysql怎么回滚删除数据 mysql数据库如何回滚_mysql怎么回滚删除数据_02


2、事务的四个特性

数据库管理系统(DBMS)在写入或者更新资料的过程中,为了保证事务是正确可靠的,必须具备四个特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

2.1 原子性

原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中,若发生错误,则会回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即事务不可分割、不可约简。

例如,“A账户向B账户转账100元”这个事务的6个操作必须要么全部执行要么全部不执行,才满足原子性。

2.2一致性

一致性:在事务开始之前和事务执行结束以后,数据库的完整性没有被破坏。

例如,以转账为例,假如A账户和B账户的余额总共为1000,那么不论A和B之间转账多少次,最终所有转账事务结束之后,二者余额相加仍然应该是1000。这就是事务的一致性。

2.3 隔离性

隔离性:数据库允许多个并发事务同时对数据库进行读写和修改,多个并发事务之间相互隔离,互不干扰。

例如,给定任意2个并发事务T1和T2,在事务T1看来,T2要么在T1开始之前已经结束,要么在T1结束之后才才能开始,事务之间感觉不到其它的事务在并发地执行,但是事实上确实是在并发执行。

2.4 持久性

持久性:事务一旦提交,对数据库中的数据的修改就是永久性的,即使系统故障,此修改也不会消失。

多版本并发控制(MVCC,Multi-Versioning Concurrency Control):同一条记录在系统中可以存在多个版本。上述的对于同一个数据,不同视图中不同值的现象就是MVCC。

那么回滚日志什么时候删除呢?在不需要的时候删除。当系统判断系统中没有事务会再用这些回滚日志的时候,就会被删除。那么什么时候才不需要呢? 当系统里没有比这个回滚日志更早的read-view的时候。

以下讨论一下,为什么尽量不要使用长事务?

长事务表明系统中存在很老的事务视图。由于这些事务随时可能访问数据库的任何数据,因此这些事务提交之前,数据库中涉及到它可能访问的回滚记录都需要保留,这就会占用大量的存储空间。

除了对回滚段的影响,长事务还占用锁资源,也可能拖垮整个库。

因此,长事务存在潜在的风险,应该尽量避免使用。