湘潭网站建设网站推广中山网站建设的公司
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:11
当前位置: 首页 > news >正文
湘潭网站建设网站推广,中山网站建设的公司,wordpress分类目录去页眉,网站开发网上悼念第13章 事务基础知识
数据库事务概述 1.1 基本概念 事务#xff1a;一组逻辑操作单元#xff0c;使数据从一种状态变换到另一种状态。 事务处理的原则#xff1a;保证所有事务都作为一个工作单元来执行#xff0c;即使出现了故障#xff0c;都不能改变这种…第13章 事务基础知识
数据库事务概述 1.1 基本概念 事务一组逻辑操作单元使数据从一种状态变换到另一种状态。 事务处理的原则保证所有事务都作为一个工作单元来执行即使出现了故障都不能改变这种执行方式。当在一个事务中执行多个操作时要么所有的事务都被提交(commit)那么这些修改就永久地保存下来要么数据库管理系统将放弃所作的所有修改整个事务回滚(rollback)到最初状态。 1.2 事务的ACID特性 原子性atomicity 原子性是指事务是一个不可分割的工作单位要么全部提交要么全部失败回滚。 一致性consistency 一致性是指事务执行前后数据从一个合法性状态变换到另外一个合法性状态。这种状态是语义上的而不是语法上的跟具体的业务有关。 隔离型isolation 事务的隔离性是指一个事务的执行不能被其他事务干扰即一个事务内部的操作及使用的数据对并发的其他事务是隔离的并发执行的各个事务之间不能互相干扰。 持久性durability 持久性是指一个事务一旦被提交它对数据库中数据的改变就是永久性的接下来的其他操作和数据库故障不应该对其有任何影响。 持久性是通过事务日志来保证的。日志包括了重做日志和回滚日志。当我们通过事务对数据进行修改的时候首先会将数据库的变化信息记录到重做日志中然后再对数据库中对应的行进行修改。这样做的好处是即使数据库系统崩溃数据库重启后也能找到没有更新到数据库系统中的重做日志重新执行从而使事务具有持久性。 1.3 事务的状态 活动的active 事务对应的数据库操作正在执行过程中时我们就说该事务处在活动的状态。 部分提交的partially committed 当事务中的最后一个操作执行完成但由于操作都在内存中执行所造成的影响并没有刷新到磁盘时我们就说该事务处在部分提交的状态。 失败的failed 当事务处在活动的或者部分提交的状态时可能遇到了某些错误数据库自身的错误、操作系统错误或者直接断电等而无法继续执行或者人为的停止当前事务的执行我们就说该事务处在失败的状态。 中止的aborted 如果事务执行了一部分而变为失败的状态那么就需要把已经修改的事务中的操作还原到事务执行前的状态。换句话说就是要撤销失败事务对当前数据库造成的影响。我们把这个撤销的过程称之为回滚。当回滚操作执行完毕时也就是数据库恢复到了执行事务之前的状态我们就说该事务处在了中止的状态。 提交的committed 当一个处在部分提交的状态的事务将修改过的数据都同步到磁盘上之后我们就可以说该事务处在了提交的状态。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BSiHC9Cc-1682077658098)(null)]
如何使用事务 2.1 显式事务 步骤1 START TRANSACTION或者BEGIN作用是显式开启一个事务。 mysql BEGIN; #或者 mysql START TRANSACTION;START TRANSACTION语句相较于BEGIN特别之处在于后边能跟随几个修饰符 ①READ ONLY标识当前事务是一个只读事务也就是属于该事务的数据库操作只能读取数据而不能修改数据。 ②READ WRITE标识当前事务是一个读写事务也就是属于该事务的数据库操作既可以读取数据也可以修改数据。 ③WITH CONSISTENT SNAPSHOT启动一致性读。 步骤2一系列事务中的操作主要是DML不含DDL 步骤3提交事务 或 中止事务即回滚事务
提交事务。当提交事务后对数据库的修改是永久性的。
mysql COMMIT;# 回滚事务。即撤销正在进行的所有没有提交的修改 mysql ROLLBACK; # 将事务回滚到某个保存点。 mysql ROLLBACK TO [SAVEPOINT]其中关于SAVEPOINT相关操作有
在事务中创建保存点方便后续针对保存点进行回滚。一个事物中可以存在多个保存点。
SAVEPOINT 保存点名称;# 删除某个保存点 RELEASE SAVEPOINT 保存点名称;2.2 隐式事务 显式的的使用START TRANSACTION或者BEGIN语句开启一个事务。这样在本次事务提交或者回滚前会暂时关闭掉自动提交的功能。把系统变量autocommit的值设置为OFF 2.3 隐式提交数据的情况 数据定义语言Data definition language缩写为DDL 隐式使用或修改mysql数据库中的表 事务控制或关于锁定的语句 当我们在一个事务还没提交或者回滚时就又使用START TRANSACTION或者BEGIN语句开启了另一个事务时会隐式的提交上一个事务。当前的autocommit系统变量的值为OFF我们手动把它调为ON时也会隐式的提交前边语句所属的事务。使用LOCK TABLES、UNLOCK TABLES等关于锁定的语句也会隐式的提交前边语句所属的事务。
事务隔离级别 3.1 数据并发问题
脏写Dirty Write 对于两个事务 Session A、Session B如果事务Session A修改了另一个未提交事务Session B修改过的数据那就意味着发生了脏写 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QVPbMKlY-1682077654825)(https://cdn.jsdelivr.net/gh/aoshihuankong/cloudimgmaster/img/202204031124086.png)]
脏读Dirty Read 对于两个事务 Session A、Session BSession A读取了已经被 Session B更新但还没有被提交的字段。之后若 Session B回滚Session A读取的内容就是临时且无效的。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDoiAvKT-1682077654825)(https://cdn.jsdelivr.net/gh/aoshihuankong/cloudimgmaster/img/202204031124136.png)]
不可重复读Non-Repeatable Read 对于两个事务Session A、Session BSession A读取了一个字段然后 Session B更新了该字段。 之后Session A再次读取同一个字段值就不同了。那就意味着发生了不可重复读。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vGX03D6E-1682077658077)(null)]
幻读Phantom 对于两个事务Session A、Session B, Session A 从一个表中读取了一个字段, 然后 Session B 在该表中插入了一些新的行。 之后, 如果 Session A再次读取同一个表, 就会多出几行。那就意味着发生了幻读。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g9OElqJu-1682077654826)(https://cdn.jsdelivr.net/gh/aoshihuankong/cloudimgmaster/img/202204031125847.png)] 注意1 有的同学会有疑问那如果Session B中剔除了一些符合studentno 0的记录而不是插入新记录那么Session A之后再根据studentno 0的条件读取的记录变少了这种现象算不算幻读呢这种现象不属于幻读幻读强调的是一个事物按照某个相同条件多次读取记录时后读取时读到了之前没有读到的记录。 注意2 那对于先前已经读到的记录之后又读取不到这种情况算啥呢这相当于对每一条记录都发生了不可重复读的现象。幻读只是重点强调了读取到之前读取没有获取到的记录。 3.2 SQL中的四种隔离级别 SQL标准中设立了4个隔离级别 READ UNCOMMITTED读未提交在该隔离级别所有事务都可以看到其他未提交事务的执行结果。不能避免脏读、不可重复读、幻读。READ COMMITTED读已提交它满足了隔离的简单定义一个事务只能看见已经提交事务所做的改变。这是大多数数据库系统的默认隔离级别但不是MySQL默认的。可以避免脏读但不可重复读、幻读问题仍然存在。REPEATABLE READ可重复读事务A在读到一条数据之后此时事务B对该数据进行了修改并提交那么事务A再读该数据读到的还是原来的内容。可以避免脏读、不可重复读但幻读问题仍然存在。这是MySQL的默认隔离级别。SERIALIZABLE可串行化确保事务可以从一个表中读取相同的行。在这个事务持续期间禁止其他事务对该表执行插入、更新和删除操作。所有的并发问题都可以避免但性能十分低下。能避免脏读、不可重复读和幻读。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYThnVwv-1682077654827)(https://cdn.jsdelivr.net/gh/aoshihuankong/cloudimgmaster/img/202204031127542.png)] 3.3 如何设置事务的隔离级别 SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL 隔离级别; #其中隔离级别格式 READ UNCOMMITTED READ COMMITTED REPEATABLE READ SERIALIZABLE或者 SET [GLOBAL|SESSION] TRANSACTION_ISOLATION 隔离级别 #其中隔离级别格式 READ-UNCOMMITTED READ-COMMITTED REPEATABLE-READ SERIALIZABLE
- 上一篇: 湘潭网站建设电话磐石网络wordpress条件查询插件
- 下一篇: 湘潭网站建设湘潭广州市场调研公司
相关文章
-
湘潭网站建设电话磐石网络wordpress条件查询插件
湘潭网站建设电话磐石网络wordpress条件查询插件
- 技术栈
- 2026年04月20日
-
湘潭网站建设 搜索磐石网络河南省建协网官方网站
湘潭网站建设 搜索磐石网络河南省建协网官方网站
- 技术栈
- 2026年04月20日
-
湘潭网站定制旅游景点网站建设
湘潭网站定制旅游景点网站建设
- 技术栈
- 2026年04月20日
-
湘潭网站建设湘潭广州市场调研公司
湘潭网站建设湘潭广州市场调研公司
- 技术栈
- 2026年04月20日
-
湘潭学校网站建设 精诚磐石网络购物网网站建设开题报告
湘潭学校网站建设 精诚磐石网络购物网网站建设开题报告
- 技术栈
- 2026年04月20日
-
湘潭做网站 磐石网络很专业云南网站建设优化企业
湘潭做网站 磐石网络很专业云南网站建设优化企业
- 技术栈
- 2026年04月20日
