MYSql 事务的学习分享

101 阅读2分钟

最近开发公司的实验室管理系统,涉及到物料库存数量,所以使用了数据库的事务机制。在使用的过程,再次深入了解 mysql 的事务机制并在此记录。

MySql 事务

  • 什么是事务? 事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务)。

  • 事务的特征

    1. 原子性(atomicity) 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

    2. 一致性(Consistency) 一致性是指事务将数据库从一种一致性转换到另外一种一致性状态,在事务开始之前和事务结束之后数据库中数据的完整性没有被破坏。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性。例如:A 向 B 转账,不可能 A 扣了钱,B 却没收到。

    3. 隔离性(Isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据 对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。例如:A 正在从一张银行卡中取钱,在 A 取钱的过程结束前,B 不能向这张卡转账。

    4. 持久性(Durability) 一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,已经提交的修改数据也不会丢失。MySQL 事务的持久性是通过 redo log 来实现的。redo log 也是 InnoDB 存储引擎特有的。具体实现方式是:当发生数据修改(增、删、改)的时候,InnoDB 引擎会先将记录写到 redo log 中,并更新内存,此时更新就算完成了。同时 InnoDB 引擎会在合适的时机将记录刷到磁盘中。

参考文章地址: www.zhihu.com/question/23… www.coder4.com/archives/59…