MySQL 事务 ACID 四大特性 + 四大隔离级别(面试高频考点)

发布时间:2026/6/26 5:30:47

MySQL 事务 ACID 四大特性 + 四大隔离级别(面试高频考点) 一.啥么是事务事务把一组SQL语句打包成为一个整体在这组SQL的执行过程中要么全部成功要么全部失败。二.事务的ACID特性事务的AICD特性值得是Atomicity(原子性),Consistency(一致性),Isolation(隔离性)和Durability(持久性)。Atomicity(原子性):一个事务的所有操作要么全部成功要么全部失败不会出现只执行了一半的情况如果事务在执行的过程中发生错误会回滚到初始状态就像这个事务没有执行过一样。Consistency(一致性在事务开始之前和事务结束之后数据库的完整性不会被破环。Ioslation(隔离性):数据库允许许多个并发事务同时对数据进行读写和修改隔离性可以防止多个事务并发执行时由于交叉执行而导致的数据不一致。Durability(持久性):事务处理结束后对数据的修改将永久的写入存储介质即使系统发生故障也不会丢失。三.为啥么要使用事务?事务具备的ACID特性是我们使用事务的原因在我们日常的业务场景中有大量的场景要使用事务来保证。支持事务的数据库能够接话我们的编程模型不需要我们去考虑各种各样的潜在错误和并发问题在使用事务过程中要么提交要么回滚不用去考虑网络异常服务器宕机等其他因素因此我们为您经常借出的事务本质上是数据库对ACID模型的一个实现是为应用层服务的。四.如何使用事务4.1查看支持事务的存储引擎要使用事务那么数据库就要支持事务在MySQL中支持事务的引擎是InnoDB,可以通过show engines;语句查看:4.2语法#开始一个新的事务start transaction;#或begin;//建议使用因为简单好记#提交当前事务并对更改持久保存commit;#回滚当前事务取消更改rollback;• START TRANSACTION 或 BEGIN 开始⼀个新的事务• COMMIT 提交当前事务并对更改持久化保存• ROLLBACK 回滚当前事务取消其更改• ⽆论提交还是回滚事务都会关闭4.3自动/手动提交事务默认情况下MySQL是自动提交事务的,也就是说我们执行的每个修改操作比如插入删除和更新都会自动开启一个事务并在语句执行完之后自动提交发生异常时自动回滚。查看当前事务是否自动提交可以使用以下语句可以通过以下语句设置事务为自动或手动提交# 设置事务⾃动提交mysql SET AUTOCOMMIT1; # ⽅式⼀mysql SET AUTOCOMMITON; # ⽅式⼆# 设置事务⼿动提交mysql SET AUTOCOMMIT0; # ⽅式⼀mysql SET AUTOCOMMITOFF; # ⽅式⼆注意只要使用start transaction或begin开启事务必须要通过commit提交才能持久化与是否设置set autocommit无关手动提交模式下不用显示开启事务执行修改操作后提交或回滚时直接使用commit或rollback已提交的事务不能回滚6. 事务的隔离性和隔离级别6.1 什么是隔离性MySQL服务可以同时被多个客⼾端访问每个客⼾端执⾏的DML语句以事务为基本单位那么不 同的客⼾端在对同⼀张表中的同⼀条数据进⾏修改的时候就可能出现相互影响的情况为了保证不同 的事务之间在执⾏的过程中不受影响那么事务之间就需要要相互隔离这种特性就是隔离性。6.2 隔离级别• READ UNCOMMITTED 读未提交• READ COMMITTED 读已提交• REPEATABLE READ 可重复读(默认)• SERIALIZABLE 串⾏化6.3 不同隔离级别存在的问题READ UNCOMMITTED-读未提交与脏读事务A中执⾏了⼀条 INSERT 语句在没有执⾏ COMMIT 的情况下会在事务B中被读取到此时如果事务A执⾏回滚操作那么事务B中读取到事务 A写⼊的数据将没有意义我们把这个理象叫做 脏读READ COMMITTED-读已提交与不可重复读事务A先对某条数据进⾏了查询之后事务 B对这条数据进⾏了修改并且提交( COMMIT )事务事务A再对这条数据进⾏查询时得到了事务B 修改之后的结果这导致了事务A在同⼀个事务中以相同的条件查询得到了不同的值这个现象要不 可重复读。REPEATABLE READ-可重复读与幻读事务A查询了⼀个区间的记录得到 结果集A事务B向这个区间的间隙中写⼊了⼀条记录并提交事务A再查询这个区间的结果集时会查 到事务B新写⼊的记录得到结果集B两次查询的结果集不⼀致这个现象就是幻读。SERIALIZABLE-串⾏化可以解决所有并发中的安 全问题

相关新闻