事务回滚

Sequelize 中文文档 v4 - Transactions - 事务

南楼画角 提交于 2019-12-01 05:19:13
Transactions - 事务 此系列文章的应用示例已发布于 GitHub: sequelize-docs-Zh-CN . 可以 Fork 帮助改进或 Star 关注更新. 欢迎 Star. Sequelize 支持两种使用事务的方法: 一个将根据 promise 链的结果自动提交或回滚事务,(如果启用)用回调将该事务传递给所有调用 而另一个 leave committing,回滚并将事务传递给用户。 主要区别在于托管事务使用一个回调,对非托管事务而言期望 promise 返回一个 promise 的结果。 托管事务(auto-callback) 托管事务自动处理提交或回滚事务。你可以通过将回调传递给 sequelize.transaction 来启动托管事务。 注意回传传递给 transaction 的回调是否是一个 promise 链,并且没有明确地调用 t.commit() 或 t.rollback() 。 如果返回链中的所有 promise 都已成功解决,则事务被提交。 如果一个或几个 promise 被拒绝,事务将回滚。 return sequelize.transaction( function ( t ) { // 在这里链接您的所有查询。 确保你返回他们。 return User.create({ firstName : 'Abraham' , lastName

Django事务、锁和中间件

南楼画角 提交于 2019-12-01 04:59:55
一、事务和锁 锁 mysql: select * from book where id=1 for update;数据库中行级锁的用法 begin; start transaction; select * from t1 where id=1 for update; commit rollback; django orm models.Book.objects.select_for_update().filter(id=1) 事务 Django是做事务处理 django1.8版本之前是有很多种添加事务的方式的,中间件的形式(全局的)、函数装饰器的形式,上下文管理器的形式等,但是很多方法都在1.8版之后给更新了,下面我们只说最新的: 1 全局开启   在Web应用中,常用的事务处理方式是将每个请求都包裹在一个事务中。这个功能使用起来非常简单,你只需要将它的配置项ATOMIC_REQUESTS设置为True。   它是这样工作的:当有请求过来时,Django会在调用视图方法前开启一个事务。如果请求被正确处理并正确返回了结果,Django就会提交该事务。否则,Django会回滚该事务。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HOST': '127.0.0.1'

Django之锁和事务,中间件

橙三吉。 提交于 2019-12-01 04:59:47
一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,看下面的事务一节。 返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句。 举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的是共享锁,所以我们可以手动加上互斥锁。create、update、delete操作时,mysql自动加行级互斥锁 所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。 一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。 如果这不想要使查询阻塞的话,使用select_for_update(nowait=True)。 如果其它事务持有冲突的锁,互斥锁, 那么查询将引发 DatabaseError 异常。你也可以使用select_for_update(skip_locked=True)忽略锁定的行。 nowait和  skip_locked是互斥的,同时设置会导致ValueError。 目前,postgresql

Windows下MySQL数据库备份和回滚

坚强是说给别人听的谎言 提交于 2019-11-30 23:03:25
1.下载安装binlog2sql https://github.com/danfengcao/binlog2sql 安装命令: shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql shell> pip install -r requirements.txt 2.配置my.ini server_id = 1 log_bin = mysql-bin.log  #设置log文件保存路径,默认为mysql的data目录下 max_binlog_size = 512M  #最大log binlog_format = row binlog_row_image = full 3.设置Path环境变量,增加mysql下bin路径 4.重新运行数据库 5.进行相关事务操作,然后测试log文件是否保存 6.查看log文件 7.删表,恢复log文件中语段。 导出备份的sql语句: 执行sql语句: 完成恢复。 8.执行只备份test这张表的命令:mysqldump --opt --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE -u root -

Java Spring 事务回滚详解

十年热恋 提交于 2019-11-30 19:33:43
这篇文章主要介绍 java Spring事务回滚 spring 事务回滚 1、遇到的问题   当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误。伪代码如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(Person2); }   期待的情况:发生错误之前的 所有数据库保存操作都回滚 ,即不保存   正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败。这样子应该都不是我们要的结果吧。   当遇到这种情况,我们就可以使用 Spring的事务解决这个问题。 2、异常的一些基本知识 1) 异常的架构   异常的继承结构: Throwable为基类,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception。Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2)Error异常    Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能中止运行

mysql并发控制——数据多版本

北城余情 提交于 2019-11-30 16:52:15
内容提取自 58沈剑公众号:架构师之路 1、共享锁和排他锁 因为普通锁不能并发,所以出现了共享和排它锁 共享锁(Share Locks,记为S锁),读取数据时加S锁 排他锁(exclusive Locks)修改数据时加X锁 兼容互斥表 S X S 兼容 互斥 X 互斥 互斥 这种情况下,如果写数据的任务没有完成,数据不能被任务读取的。这回阻塞读取任务。 画外音:对应到数据库,可以理解为,写事务没有提交,读取相关数据的select会被阻塞 2、数据多版本 核心原理: 1)写任务发生时,将数据克隆一份,以版本号区分 2)写任务操作新克隆的数据,直至提交;(提交时覆盖原来版本?提交方式有待思考) 3)并发读任务可以继续读取旧版本的数据,不至于阻塞 3、redo,undo,回滚段 在进一步介绍InnoDB如何使用“读取旧版本数据”极大提高任务的并发度之前,有必要先介绍下redo日志,undo日志,回滚段(rollback segment)。 为什么要有redo 日志? 数据库事务提交后,必须将更新后的数据刷到磁盘上,以保证ACID特性。磁盘 随机写 性能较低,如果每次都刷盘,会极大影响数据库的吞吐量。 优化方式是,将修改行为先写到redo日志里(此时变成了 顺序写 ),再定期将数据刷到磁盘上,这样能极大提高性能。 画外音:这里的架构设计方法是, 随机写优化为顺序写 ,思路更重要。

08.Django基础六之ORM中的锁和事务

烈酒焚心 提交于 2019-11-30 14:22:18
一 锁    行级锁     select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节。     返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句。     举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的是共享锁,所以我们可以手动加上互斥锁。create、update、delete操作时,mysql自动加行级互斥锁     所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。     一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。 如果这不想要使查询阻塞的话,使用select_for_update(nowait=True)。 如果其它事务持有冲突的锁,互斥锁, 那么查询将引发 DatabaseError 异常。你也可以使用select_for_update(skip_locked=True)忽略锁定的行。 nowait和  skip_locked是互斥的,同时设置会导致ValueError。     目前

spring事物配置,声明式事务管理和基于@Transactional注解的使用

空扰寡人 提交于 2019-11-30 13:19:39
原文地址: https://blog.csdn.net/bao19901210/article/details/41724355 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性。 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。 显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求

分布式事务一:基于数据库原生分布式事务方案实现

浪尽此生 提交于 2019-11-30 12:04:58
声明: 本篇主要对所用到的技术做了归纳总结,对源码讲解较少,如果有基础的朋友可以直接下载源码结合时序图更能容易理解;基础比较弱的朋友建议先看看资料自看源码这样更容易理解。这里的部分资料来源于网络,所以这里对那些资料提供者表达衷心的感谢。 方案: 业务流程:Tss库向Saas转移库存,order为记录表。 技术栈: Springboot+mysql+postgreSQL+atomikos+mybatis 项目代码地址:https://github.com/bao17634/springboot-kafka-demo.git 1、分布式事务模型 ACID 实现 1.1、X/Open XA 协议(XA) 最早的分布式事务模型是 X/Open 国际联盟提出的 X/Open Distributed Transaction Processing(DTP)模型,也就是大家常说的 X/Open XA 协议,简称XA 协议。 DTP模型如图: TM:全局事务管理器 RM:多个资源管理器 AP:应用程序 全局事务管理器负责管理全局事务状态与参与的资源,协同资源一起提交或回滚;资源管理器则负责具体的资源操作。 XA 协议主要描述了 TM 与 RM 之间的接口,允许多个资源在同一分布式事务中访问。 基于 DTP 模型的分布式事务流程大致如下: XA接口详解 XA接口时双向的系统接口

@Transactional注解使用解析

狂风中的少年 提交于 2019-11-30 11:59:00
当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。 在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。 在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚 来源: https://blog.csdn.net/yyyyyysssssshhhhhh/article/details/101350078