Mysql事务

文章介绍了MySQL中的事务,包括事务的定义、操作语句、四大特性(原子性、一致性、隔离性、持久性)以及并发事务可能引发的脏读、不可重复读和幻读问题。同时,讨论了事务的不同隔离级别及其作用,强调了合理使用事务和选择隔离级别对于数据库操作的重要性。
摘要由CSDN通过智能技术生成

一:事务简介

1.1 什么是事务

  • 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
  • 在Mysql总,事务是自动进行提交的,每一条sql都是一个事务。当然我们也可以根据业务进行事务控制。

例如:
用户A向用户B进行转账2000。首先查询A是否有2000元,然后A账户减少2000元,B账户增加2000元。这是3次数据库操作。将这三次作为一个工作单位,如果某次操作失败,则回滚事务。

1.2 事务操作语句

  1. 查看事务提交方式
SELECT @@autocommit;
  1. 修改事务提交方式
SET @@autocommit=0;
  1. 手动开启事务
START TRANSACTION   或  BEGIN
  1. 提交事务
COMMIT
  1. 回滚事务
ROLLBACK

二:事务四大特性ACID

2.1 原子性(Atomicity)

事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

2.2 一致性(Consistency)

事务完成时,必须使所有的数据都保持一致状态。

2.3 隔离性(Isolation)

数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

2.4 持久性(Durability)

事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

三:并发事务引起问题

并发事务问题指的是,不同的事务在操作同一个数据库表的时候,产生的问题。主要有以下三个方面:

问题描述
脏读一个事务读到另外一个事务还没有提交的数据。
不可重复读一个事务先后读取同一条记录(两次读之间有其它事务修改了数据),但两次读取的数据不同,称之为不可重复读。
幻读一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在(读和插入的过程中,其它的事务插入了对应的数据),好像出现了

四:隔离级别

隔离级别脏读不可重复读幻读
Read uncommitted (读,未提交)
Read commiteed (读,提交)×
Repeatable Read (可重复读)××
Serializable (可序列化×××

查看事务隔离级别:

SELECT @@TRANSACTION ISOLATION

设置事务隔离级别:

SET [SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED I READ COMMITTED I REPEATABLE READ I SERIALIZABLE}

五:总结

  1. 本文介绍了MySQL中的事务及相关内容。事务是一组操作的集合,是数据库管理系统中不可分割的最小操作单元。事务的特性ACID包括原子性、一致性、隔离性和持久性。

  2. 事务的操作语句包括查看事务提交方式、修改事务提交方式、手动开启事务、提交事务和回滚事务。MySQL默认自动提交事务,但我们也可以手动控制事务的提交和回滚,保证数据的完整性和一致性。

  3. 并发事务引起的问题主要包括脏读、不可重复读和幻读。

  4. 为了解决并发事务引起的问题,MySQL提供了不同的隔离级别,包括Read uncommitted、Read committed、Repeatable Read和Serializable。每个隔离级别都有不同的特性,开发人员可以根据业务需求选择适当的隔离级别。

  5. 在开发过程中,合理运用事务和选择合适的隔离级别能够有效地解决并发问题,确保数据库操作的正确性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

郝老三

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

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

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

打赏作者

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

抵扣说明:

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

余额充值