事务(Transaction)

一、事务是什么

1.定义:

事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内 的所有SQL都将被取消执行。

2.特点:

一个事务中如果有一个数据库操作失败,那么整个 事务的所有数据库操作都会失败,数据库数据就会 回滚到该事务开始之前的状态。

3.限制 :

MySQL数据库中仅InnoDB和BDB类型的数据库表 支持事务。

二、为什么需要事务

在操作数据的时候,可能遇到多个线程同时操作数据的问题,也可能遇到突然数据库故障了的问题,这些都可能造成数据的不一致。所以事务要保证的就是一致性。

三、事务的ACID原则

原子性 :(Atomic )数据库中的 事务执行是作为原 子粒度。不可再 分,整个语句要么 执行,要么不执行 一致性 :(Consist )即在事务开始之前和 事务结束以后,数据 库的完整性约束没有 被破坏。 隔离性 :(Isolated )事务的执行互不 干扰,事务 不可能看到其他事 务运行时,中间某 一时刻的数据。 持久性 :(Durable )事务完成后 ,事务所对数据库所 作的更改便持久保存 在数据库中,不会 被回滚。

四、MySQL实现事务的方法

START TRANSACTION:开始一个事务,标记事务的起始点。

SET AUTOCOMMIT :改变自动提交模式,为0时关闭自动提交模式,为1时开启自动提交模式。默认为1,使用事务时为0。

COMMIT:提交一个事务给数据库。

ROLLBACK:将事务回滚,数据回到本次事务的初始状态。

五、MySQL实现事务的步骤

六、事务的隔离级别

1. READ_UNCOMMITTED 读未提交 2. READ_COMMITTED 读提交(不可重复读) 3. REPEATABLE_READ 可重复读 4. SERIALIZABLE 串行化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nestjs是一个基于Node.js的开发框架,而是nestjs中常用的一个数据库ORM工具。在nestjs中使用typeorm进行事务回滚可以通过以下步实现: 1. 首先,你需要在nestjs项目中安装typeorm和数据库驱动程序(如mysql、等)的相关依赖。 2. 在中,你可以使用装饰器`@()`来标记一个方法需要在事务中执行。这个装饰器可以应用在controller或service层方法上。 3. 在需要回滚事的方法中,你可以使用typeorm提供的`EntityManager`来管理事务。通过调用`entityManager.transaction()`方法,你可以创建一个新的事务。 4. 在事务中执行数据库操作时,如果发生错误或者需要回滚事务,你可以使用`entityManager.rollback()`方法来回滚事务。 5. 如果所有的数据库操作都成功完成,你可以使用`entityManager.commit()`方法来提交事务。 下面是一个nestjs中使用typeorm进行事务回滚的示例代码: ```typescript import { Injectable } from '@nestjs/common'; import { InjectEntityManager } from '@nestjs/typeorm'; import { EntityManager } from 'typeorm'; @Injectable() export class MyService { constructor( @InjectEntityManager() private readonly entityManager: EntityManager, ) {} @Transaction() async myMethod(): Promise<void> { try { await this.entityManager.transaction(async (entityManager) => { // 在事务中执行数据库操作 await entityManager.query('INSERT INTO table1 (column1) VALUES (value1)'); await entityManager.query('INSERT INTO table2 (column2) VALUES (value2)'); }); } catch (error) { // 发生错误时回滚事务 await this.entityManager.rollback(); throw error; } } } ``` 在上面的示例中,`myMethod()`方法被标记为`@Transaction()`,表示该方法需要在事务中执行。在事务中,我们使用`entityManager.query()`方法执行数据库操作。如果发生错误,我们会回滚事务并抛出错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值