MySQL事务的ACID特性及并发问题知识点总结

文 / @WordPress主题

MySQL是一个常用的关系型数据库管理系统,也是许多企业在业务系统中使用的数据库,在使用MySQL时,事务的ACID特性及并发问题是需要掌握的知识点。

一、事务的概念

事务是由一条或多条对数据库操作的SQL语句所组成的一个不可分割的单元,只有当事务中所有操作都正常执行完了,整个事务才会被提交给数据库,如果有部分事务处理失败,那么事务就要回滚到最初的状态,因此,事务要么全部执行成功,要么全部失败。

事务处理有三个状态:begin:开启一个事务;commit提交一个事务;如果其中任何一条SQL语句由于停电、或者服务器出错,导致SQL执行异常,那事务就没有提交,事务会回滚(rollback),数据将恢复到事务开始前的状态。MySQL的InnoDB存储引擎支持事务、支持行锁。

二、ACID特性

每一个事务必须满足下面的4个特性:

1. 原子性(Atomic):事务是一个不可分割的整体,事务必须具有原子特性,即当事务修改时,要么全执行,要么全不执行,即不允许事务部分的完成。

2. 一致性(Consistency):一个事务执行之前和执行之后,数据库数据必须保持一致性状态。数据库的一致性状态必须由用户来负责,由并发控制机制实现。

3. 隔离性(Isolation):当两个或多个事务并发执行时,为了保证数据的安全性,将一个事务内部的操作与其他事务的操作隔离起来,不被其他正在执行的事务所看到,使得并发执行的各个事务之间不能互相影响。

4. 持久性(Durability):事务完成以后(DBMS)保证它对数据库中的数据的修改时永久性的,即使数据库因为故障出错,也应该能够恢复数据。

三、事务并发存在的问题

事务处理不经隔离,并发执行事务时通常会发生以下问题:

1. 脏读(DirtyRead):一个事务读取了另一个事务未提交的数据。

2. 不可重复读(NonRepeatableRead):一个事务的操作导致另一个事务前后两次读到不同的数据。

3. 幻读(PhantomRead):一个事务的操作导致另一个事务前后两次查询的结果数据量不同。

脏读、不可重复读和幻读都需要通过设置不同的隔离级别来避免。

四、事务相关命令

查看MySQL是否自动提交事务:select @@autocommit;

设置事务提交方式为手动提交(只影响当前session):set autocommit=0;

以上就是MySQL事务的ACID特性及并发问题知识点总结的详细内容,需要在使用MySQL时进行掌握,避免在使用过程中出现问题。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。