MySql 事务
一:事务简介
1.1 什么是事务
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
在Mysql总,事务是自动进行提交的,每一条sql都是一个事务。当然我们也可以根据业务进行事务控制。
例如:
用户A向用户B进行转账2000。首先查询A是否有2000元,然后A账户减少2000元,B账户增加2000元。这是3次数据库操作。将这三次作为一个工作单位,如果某次操作失败,则回滚事务。
1.2 事务操作语句
查看事务提交方式
SELECT @@autocommit;
修改事务提交方式
SET @@autocommit=0;
手动开启事务
START TRANSACTION 或 BEGIN
提交事务
COMMIT
回滚事务
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.在开发过程中,合理运用事务和选择合适的隔离级别能够有效地解决并发问题,确保数据库操作的正确性。