Mysql事务

MySql 事务

  • 一:事务简介
    • 1.1 什么是事务
    • 1.2 事务操作语句
  • 二:事务四大特性ACID
    • 2.1 原子性(Atomicity)
    • 2.1 一致性(Consistency)
    • 2.1 隔离性(Isolation)
    • 2.1 持久性(Durability)
  • 三:并发事务引起问题
  • 四:隔离级别
  • 五:总结

一:事务简介

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.1 一致性(Consistency)

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

2.1 隔离性(Isolation)

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

2.1 持久性(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. 在开发过程中,合理运用事务和选择合适的隔离级别能够有效地解决并发问题,确保数据库操作的正确性。

你可能感兴趣的:(mysql,mysql,数据库)