【Mysql】mysql学习之旅06-事务

本文介绍了MySQL事务的概念,包括原子性、一致性、隔离性和持久性,展示了如何在MySQL中设置自动提交、开启和关闭事务,以及不同隔离级别的作用。实操示例让你理解事务的使用与隔离问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql学习之旅06-事务

概念:

  • 事务是为了完成某一项工作或业务的一组步骤的集合
  • 事务是一个完整的整体,不能拆分开
  • 事务在数据库中的表现就是一组sql语句完成某个业务

特新(ACID):

  • 原子性(Atomicity): 事务是一个整体,不能分割
  • 一致性(Consistency): 事务执行的结果只有两种,全部成功或者全部失败。不存在部分成功或部分失败的情况
  • 隔离性(Isolation): 各个事务之间相互隔离,互不影响
  • 持久性(Durability): 事务执行的结果可以永久保存到数据库或文件中。任何时候都可以查询事务执行的 结果。

使用:

  1. mysql默认事务是自动提交的
  2. 查看事务自动提交的状态
select @@AUTOCOMMIT
或者
SHOW SESSION VARIABLES LIKE 'AUTOCOMMIT'
  1. 可以设置事务提交的模式
SET AUTOCOMMIT = 0; 关闭
SET AUTOCOMMIT = 1; 开启
### 设置关闭后需要手动提交事务COMMIT,或者回滚事务ROLLBACK
  1. 事务使用方式
  • 开启事务:START TRANSACTION; 或者BEGIN;
  • 提交事务:COMMIT;事务成功,事务的处理结果永久保存到数据库
  • 回滚事务:ROLLBACK;事务失败,回滚到事务开始之前的状态,注意自动增长不会回滚
  1. 事务只针对数据库中表的变动,不针对查询

隔离级别的安全问题

  • 读问题:脏读,不可重复读,幻读
  • 写问题:丢失更新(悲观锁,乐观锁)

四种隔离级别:

级别含义备注
READ UNCOMMITTED读未提交会出现脏读:一个事务读到了另一个事务未提交的数据
READ COMMITTED读已提交会出现不可重复读:一个事务的数据修改未提交,另一个事务无法进行数据修改操作,在一个事务修改提交之后,另一个事务在它提交前查询和提交后查询结果是不一样的,所以不可重复读取统一数据
REPEATABLE READ可重复读(mysql)会出现幻读现象:A事务在B事务提交修改之前做了查询,在B事务提交之后,A事务再次查询结果和之前查的结果一样, 并没有查询到B事务提交后的数据
Serializable可串行化
查看隔离级别
SELECT @@tx_isolation
设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL read uncommitted
sql实操:
//查看事务自动提交是否开启(1开启,0关闭)
select @@autocommit;
//设置手动提交
set @@autocommit = 0;

//开启一个事务
start transaction;
begin;

//提交事务
commit;

//回滚事务
rollback;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffHan^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值