mysql事务

Spring——事务的特性、隔离机制(转)

妖精的绣舞 提交于 2019-11-27 03:39:12
Spring——事务的特性、隔离机制(转) 一、事务 1.事务在项目开发中非常重要,涉及到数据一致性问题,不容马虎 2.事务的四大特性: 原子性:   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 一致性:   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。   如:拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性:   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。 持久性 :   持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。   例如:我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成

事物 @Transactional

我只是一个虾纸丫 提交于 2019-11-27 03:17:29
转载: http://www.cnblogs.com/kristain/articles/2038397.html 一、什么是事务   事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。   事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。 原子性 。即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。 一致性或可串性 。事务的执行使得数据库从一种正确状态转换成另一种正确状态。 隔离性 。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。 持久性 。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障

数据库存储引擎

泪湿孤枕 提交于 2019-11-27 02:37:23
数据库存储引擎 对于初学者来说我们通常不关注存储引擎,但是 MySQL 提供了多个存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。 存储引擎简介 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。 InnoDB InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。我的电脑上安装的 MySQL 5.6.13 版,InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择: 更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。 事务

mysql复制那点事(2)-binlog组提交源码分析和实现

筅森魡賤 提交于 2019-11-27 02:31:28
mysql复制那点事(2)-binlog组提交源码分析和实现 [TOC] 0. 参考文献 序号 文献 1 MySQL 5.7 MTS源码分析 2 MySQL 组提交 3 MySQL Redo/Binlog Group Commit , 2pc事务两阶段提交,Crash Recovery浅析 4 MySQL · 物理备份 · Percona XtraBackup 备份原理 5 条件变量(Condition Variable)详解 6 Linux线程同步之条件变量 本文主要介绍了mysql binlog组提交的原理和源码实现。感谢上述参考文献在本文形成的过程中提供的帮助。本文所介绍的内容如下: mysql 两阶段提交实现的历史以及存在的问题 mysql binlog 组提交实现的原理 1. innodb和binlog的两阶段提交 众所周知,事务在innodb上提交的时候需要日志先行 WAL (Write-Ahead-Log)。在binlog开启的情况下,为了保证binlog和存储引擎的一致性,会在事物提交的时候自动开启两阶段提交。对于单个事务,mysql实现的两阶段提交流程如图所示(参考文献 1 和 文献2 ): 当事务进入PrePare阶段的时候,会在存储引擎层进行提交。生成undo log 和redo log 内存日志。 之后生成binlog并调用sync落盘。 在存储引擎层提交

MySQL四种隔离级别

喜你入骨 提交于 2019-11-27 02:28:53
什么是事务 事务是应用程序中一系列严密的操作,所有的操作必须成功完成,否则每个操作中国所做的所有更改都会被撤销。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 事务的结束有两种,当事务中的所有步骤全部成功执行时,事务提交。如果一个步骤失败,将发生回滚操作,撤销 之前到事务开始时的 所有操作。 事务的ACID 事务具有四个特征:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这一个特性简称为ACID特性。 原子性:事务是数据库的逻辑工作单位,事务中包含的各操作要么都做、要么都不做。 一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果是,就说数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 隔离性:一个事务的执行不被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。 持续性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其他操作或者故障不应该对其执行结果有任何影响。

MySQL主从复制

断了今生、忘了曾经 提交于 2019-11-27 02:26:42
MySQL主从复制 主从复制类型: 异步方式:一般的MySQL复制,主server只负责发送二进制日志,不check从是否完成 半同步方式:在一堆从中,主只保证其中一个返回同步完成即可,如果超时,自动降级为异步 级联方式:主复制给其中一个从,这个从再复制给后面的一堆从,用于减轻主的负担 架构: 普通一主多从: 带负载均衡的读写分离: 带级联复制和负载均衡的读写分离: 主从步骤: 主上面为每个slave开启一个dump thread 从上的IO thread和主上的dump thread连接,并发送二进制日志,在从上保存为realy log 从上的SQL thread从relay log中逐条读取并在本地执行 主从配置: 主上配置: 开启binlog 设置server id 创建同步用户,并授予REPLICATION SLAVE和REPLICATION CLIENT权限 从上配置: 开启relay log 设置与主不同的server id CHANGE MASTER TO MASTER_HOST='',MASTER_PORT=,MASTER_USER='',MASTER_PASSWORD='',MASTER_LOG_FILE='',MASTER_LOG_POS=; start slave io_thread;start slave sql_thread; 配置skip-slave

13 Spring 的事务控制

微笑、不失礼 提交于 2019-11-27 02:24:14
1.事务的概念    理解事务之前,先讲一个你日常生活中最常干的事:取钱。   比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱;然后ATM出1000元钱。 这两个步骤必须是要么都执行要么都不执行 。如果银行卡扣除了1000块但是ATM出钱失败的话,你将会损失1000元;如果银行卡扣钱失败但是ATM却出了1000块,那么银行将损失1000元。所以,如果一个步骤成功另一个步骤失败对双方都不是好事,如果不管哪一个步骤失败了以后,整个取钱过程都能回滚,也就是完全取消所有操作的话,这对双方都是极好的。 事务就是用来解决类似问题的。 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。   在企业级应用程序开发中,事务管理必不可少的技术,用来确保数据的完整性和一致性。   事务有四个特性:ACID     原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。     一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。     隔离性(Isolation)

XA事务与MySQL

主宰稳场 提交于 2019-11-27 02:19:04
XA事务就是两阶段提交的一种实现方式 XA规范主要定义了事务管理器TM,和资源管理器RM之间的接口 根据2PC的规范,将一次事务分割成两个阶段 1. prepare阶段 TM向所有RM发送prepare指令,RM接受到指令后执行数据修改和日志记录等操作,然后返回 可以提交/不可提交 给TM (按照我的理解应该类似于MySQL在开启一个事务之后,只差最后的COMMIT或者ROLLBACK的状态) 2. commit阶段 TM接受到所有RM的prepare结果 如果有RM返回是 不可提交 或者超时,那么向所有RM发送ROLLBACK命令 如果所有RM都返回可以提交,那么向所有RM发送COMMIT命令 XA的异常情况处理 MySQL与XA事务的关系有两种情况 1. 内部XA 在使用innodb作为存储引擎,并且开启binlog的情况下,MySQL同时维护了binlog日志与innodb的redo log 为了保证这两个日志的一致性,MySQL使用了XA事务,由于只在单机上工作,所以被称为内部XA 2. 外部XA 就是一般谈论的分布式事务了 MySQL支持XA START/END/PREPARE/COMMIT这些sql语句,通过使用这些命令,我们是可以完成分布式事务的 状态转移图如下 (我有点不能理解的是,为什么一定需要XA END这个语句,直接XA PREPARE不行吗) 在MySQL5

sysbench 压力测试

ⅰ亾dé卋堺 提交于 2019-11-27 02:17:36
/*--> */ /*--> */ 介绍 sysbench是一个模块化、跨平台、多线程基准测试工具,主要用于测试不同系统参数下的数据库负载情况,本文主要介绍0.4版本的使用。sysbench主要用于以下性能测试: 文件I/O性能 调度 内存分配和传输 POSIX线程 数据库 安装 1.安装插件 yum install libtool -y 2.安装 ./configure --prefix=/usr/local/sysbench-0.4.12 --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib make make install cp -r sysbench/tests /usr/local/sysbench-0.4.12 ln -s /usr/local/sysbench-0.4.12/bin/sysbench /usr/local/sysbench-0.4.12/sysbench 修改环境变量,在环境变量中加入 export LD_LIBRARY_PATH=/usr/local/mysql/lib 注意:如果安装目录中没有configure那么需要执行以下操作: chmod +x autogen.sh ./autogen.sh 如果想要让 sysbench

难点重点

最后都变了- 提交于 2019-11-27 01:32:16
难点重点 回滚实物rollback 提交事务commit 在数据更新时,oracle会默认开始一个数据库事务,在这个事务没有提交以前,其他人或其他窗口查询不到这里新增或修改的数据 --这种现象称为数据库的锁---数据查询不到,因为该行数据表被锁住了,称为行级锁. --在进行数据库操作时,数据一会可见,一会不可见这样的现象称为:脏读 --脏读什么时候出现?在更新数据时,如果发生了事务的回滚,且在事务回滚前进行了数据的查询,这样的查询就会造成数据的脏读. --回滚事务使用rollback命令 rollback;--事务一旦回滚,则事务结束,当前更新的数据会回滚更新之前.且不能再提交 --执行数据更新后,如果没有问题时需要提价事务,提交事务使用commit命令 --数据一旦提交,则永久性保存到数据库中(一旦提交则事务结束,不能再回滚) commit; --数据事务的几个特性 --原子性 :执行数据更新时,要么一起成功要么一起失败.即在事务中的更新操作时一个不可分割的原子操作. --一致性:在事务操作的前后(回滚前后,提交前后),每次查询到的数据都是一样的. --开始事务前,每次查询到的数据一定是相同的;回滚事务后,每次查询到的数据一定是相同的;提交事务后,每次查询到的数据一定是相同的; --隔离性:事务一旦开启,如果没有提交或回滚,其他窗口(事务)是无法看到当前事务修改后的内容的 -