江西网站备案要求,网络厂商有哪些,搜索引擎的网址有哪些,sae wordpress博客文章目录 前言一、什么是事务#xff1f;1.1 事务概念1.2 事务的四大特性1.3 事务的隔离级别 二、实现原理2.1 TODO2.2 TODO 前言
事务是由MySQL的引擎来实现的#xff0c;通过show engines命令查看MySQL存储引擎类别#xff0c;观察只有InnoDB存储引擎支持事务。 一、什么… 文章目录 前言一、什么是事务1.1 事务概念1.2 事务的四大特性1.3 事务的隔离级别 二、实现原理2.1 TODO2.2 TODO 前言
事务是由MySQL的引擎来实现的通过show engines命令查看MySQL存储引擎类别观察只有InnoDB存储引擎支持事务。 一、什么是事务
1.1 事务概念
事务Transaction是一系列的数据库操作这些操作要么全部成功执行要么全部回滚即全部失败回到操作前的状态这样确保数据库的数据在并发访问的情况下保持一致性和完整性。
1.2 事务的四大特性
一个完整的事务必须具备四个条件这四个条件我们称为ACIDACID特性确保了一个完整的事务在数据库中的正确执行和数据的一致性。ACID这四个字母每个字母代表了一个特性。
原子性Atomicity 事务transaction被视为一个不可分割的单元要么全部执行成功要么全部不执行。如果在事务的执行过程中发生错误那么事务会被回滚到开始前的状态保持数据的一致性。
一致性Consistency 事务在执行前和执行后数据库的数据应该处于一致的状态。这意味着事务在执行时必须遵守一些预定的规则或约束以保持数据的正确性。
隔离性Isolation 事务之间是相互隔离的一个事务的执行不会被其他事务干扰。这意味着并发执行的事务不会相互影响可以保证数据的完整性和正确性。事务隔离分为不同级别包括读未提交Read uncommitted、读已提交Read Committed、可重复读Repeatable Read和串行化Serializable。
持久性Durability 一旦事务成功提交对数据库的修改将永久保存即使在系统故障或崩溃后数据也不会丢失。持久性确保数据的持久性存储保障数据的可靠性。
1.3 事务的隔离级别
事务隔离级别的主要目的是解决数据库并发访问时可能出现的以下问题 脏读Dirty Read 一个事务读取了另一个事务尚未提交的数据如果另一个事务回滚则读取到的数据实际上是无效的这种现象就被称为脏读。 不可重复读Non-repeatable Read 在同一个事务内由于其他事务对同一行数据进行了修改更新或删除导致在多次读取该行数据时得到的结果不一致。这意味着同一个事务内的两次读取操作得到了不同的数据值。重点在于其他事务的更新update和删除delete。 幻读Phantom Read 在同一个事务内由于其他事务对数据进行了插入insert或删除delete操作导致多次查询时得到的结果集不一致。幻读主要发生在范围查询中即同一个事务内的两次查询得到了不同数量的结果行。重点在于其他事务的插入insert和删除delete。
为解决以上问题可以通过设置不同的事务隔离级别可以控制这些问题的发生概率。MySQL支持以下四种事务隔离级别 读未提交Read uncommitted 最低级别的隔离允许一个事务读取另一个事务尚未提交的数据。这可能导致脏读、不可重复读和幻读问题。 读已提交Read Committed 允许一个事务读取另一个事务已提交的数据解决了脏读问题。但是仍可能出现不可重复读和幻读问题。 可重复读Repeatable Read 这是MySQL InnoDB引擎的默认隔离级别保证在一个事务内多次读取同一数据时结果始终一致。解决了脏读和不可重复读问题。但是仍可能出现幻读问题。 串行化Serializable 最高级别的隔离确保同时只有一个事务能够访问数据解决了脏读、不可重复读和幻读问题。但是串行化会导致并发性能大幅下降因为多个事务无法同时访问数据。
隔离级别以及可能产生的读现象
隔离级别脏读不可重复读幻读串行化不会发生不会发生不会发生可重复读不会发生不会发生可能发生读已提交不会发生可能发生可能发生读未提交可能发生可能发生可能发生
应结合实际的业务需求可以选择适合的隔离级别来处理数据并发操作。隔离级别越高性能可能越差因为它需要锁定更多的资源以保证数据的一致性。因此在设计事务时需要综合考虑业务的要求和性能的影响。
二、实现原理
2.1 TODO
2.2 TODO