知方号

知方号

项目中常用到的数据库事务(mysql)<事务处理题型有哪些>

项目中常用到的数据库事务(mysql)

项目中常用到的数据库事务 一.什么是事务 正式解释

一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

项目使用中的解释

将许多相关联的数据操作合并为原子操作的过程

二.事务的特性 原子性(Atomicity):组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有的操作执行成功,整个事务才提交。事务中的任何一个数据库操作失败,已经执行的任何操作都必须被撤销,让数据库返回初始状态。一致性(Consistency):一致性是事务结果的体现,其他三个特性用于保证一致性的实现隔离性(Isolation):是对不同事务之间,数据界限定义,用于表示不同事务间的数据连通性,隔离性可影响到数据得一致性的实现持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。 三.mysql对事务支持的简要说明 原子性

mysql引擎主要有InnoDB, MyISAM, MEMORY, Archive.而支持事务的只有InnoDB,所以mysql关于事务的讨论都是基于InnoDB引擎的基础上进行讨论。mysql在事务中对于原子性的保证主要是通过undo log来实现的,在进行cud操作是,首先会将执行记录写到undo中,但执行回滚时,mysql会根据undo的记录进行相反的操作,进而取消本次事务对数据得影响。

持久性

与原子性一样,事务的持久性也是通过日志来实现的,MySQL 使用重做日志(redo log)实现事务的持久性,重做日志由两部分组成,一是内存中的重做日志缓冲区,因为重做日志缓冲区在内存中,所以它是易失的,另一个就是在磁盘上的重做日志文件,它是持久的。除了所有对数据库的修改会产生重做日志,因为回滚日志也是需要持久存储的,它们也会创建对应的重做日志,在发生错误后,数据库重启时会从重做日志中找出未被更新到数据库磁盘中的日志重新执行以满足事务的持久性。当我们在一个事务中尝试对数据进行修改时,它会先将数据从磁盘读入内存,并更新内存中缓存的数据,然后生成一条重做日志并写入重做日志缓存,当事务真正提交时,MySQL 会将重做日志缓存中的内容刷新到重做日志文件,再将内存中的数据更新到磁盘上,图中的第 4、5 步就是在事务提交时执行的。

一致性

一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。 如A给B转账,不论转账的事务操作是否成功,其两者的存款总额不变(这是业务逻辑的一致性,至于数据库关系约束的完整性就更好理解了)。 保障机制(也从两方面着手):数据库层面会在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,check约束等)和触发器设置;此外,数据库的内部数据结构(如 B 树索引或双向链表)都必须是正确的。业务的一致性一般由开发人员进行保证,亦可转移至数据库层面。但是一致性是相对的,在存在并发事务的情况下,需要在隔离级别和一致性直接作出平衡。

隔离性

事务的隔离性主要体现在事务的并行执行中,如果没有数据库的事务之间没有隔离性设置,各个事务之间的数据改动会相互影响,影响数据得一致性,甚至发生级联回滚等问题,造成性能上的巨大损失。如果所有的事务的执行顺序都是线性的,那么对于事务的管理容易得多,但是允许事务的并行执行却能能够提升吞吐量和资源利用率,并且可以减少每个事务的等待时间。事务的隔离级别分别为READ UNCOMMITED、READ COMMITED、REPEATABLE READ 和 SERIALIZABLE,后面将结合spring对事务的支持做具体的讲解。

四.spring中的事务

spring事务支持编程式事务和

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。