MySQL的事务(transactions)详解及基本使用

MySQL的事务(transactions)详解及基本使用

在MySQL中,默认的存储引擎是InnoDB,InnoDB支持事务,而MyISAM不支持事务。

1. 什么是事务

MySQL事务是用于管理和维护数据一致性的一组SQL操作。事务确保了数据库中的一系列操作要么全部执行成功,要么全部回滚,从而保证数据的完整性。
事务分为显式事务和隐式事务
显式事务:代码中明确使用事务管理语句来控制事务的开始和结束。
隐式事务:指在单个SQL语句中自动处理的事务。在MySQL中,某些SQL语句(如 INSERT, UPDATE, DELETE 等)如果在未显式开启事务的情况下执行,则MySQL会自动将每个语句当作一个单独的事务来处理。这种方式无需显式地使用事务管理语句,数据库会自动在每个SQL语句执行后立即提交事务。

2. 事务的特性

  1. 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  2. 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  3. 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  4. 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

3. 并发事务带来的问题

  • 脏读:一个事务读取到另一个事务还没有提交的数据。
  • 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称为不可重复读。
  • 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现了这行数据已经存在,好像出现了“幻影”。

4. 事务的隔离级别

MySQL提供了4种事务隔离级别

  • 读已提交(READ UNCOMMITTED):最低的隔离级别,事务可以读取其他未提交事务的数据,可能会出现脏读(dirty read)。
  • 读已提交(READ COMMITTED):事务只能读取其他已提交的事务的数据,避免脏读,但可能会出现不可重复读(non-repeatable read)。
  • 可重复读(REPEATABLE READ):默认的隔离级别,事务再开始时只能看到已提交的数据,并且在整个事务中看到的数据时一致的,避免了不可重复读,但可能会出现幻读(phantom read)。
  • 可串行化(SERIALIZABLE):最高的隔离级别,通过锁定读取的所有数据行,避免了幻读,但是会导致性能下降。

在这里插入图片描述

5. MySQL中的事务的使用方法

显式事务的步骤:

  • 关闭事务自动提交
-- 关闭自动提交(适用于显式事务)
SET autocommit = 0;
-- 开启自动提交(适用于隐式事务)
SET autocommit = 1;
  • 开始事务:使用START TRANSACTIONBEGIN
  • 执行SQL操作:执行一个或多个SQL语句。
  • 提交事务:如果所有操作成功,则使用COMMIT语句提交事务。
  • 回滚事务:如果遇到错误或需要撤销操作,则使用ROLLBACK语句回滚事务。

5.1 开启事务(显式事务)

START TRANSACTION;

BEGIN;

5.2 提交事务

提交事务使用COMMIT语句,所有的修改将被保存到数据库中

COMMIT;

5.3 回滚事务

回滚事务使用ROLLBACK语句,所有的修改将被撤销。

ROLLBACK;

5.4 设置事务的隔离级别

SET TRANSACTION ISOLATION LEVEL 隔离级别;

例如,设置为读已提交:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值