我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【MySQL数据库 | 第十五篇】事务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【MySQL数据库 | 第十五篇】事务

 

 

c6e9b8cdd80f447a9d5b085ec88483be.png

目录

 

 前言:

 介绍事务:

 控制事务:

 事务四大特性:

 并发事务问题:

 事务隔离级别:

总结:


 

 前言:

这章我们将进入到MySQL基础篇的最后一章:事务,希望大家可以坚持下去,跟着我一起走完MySQL的学习之旅。

 介绍事务:

MySQL是一种关系型数据库管理系统,支持事务管理。事务是指一组数据库操作它们按照特定的顺序执行,并且要么全部成功提交,要么全部失败回滚。在MySQL中,事务可以用来保证数据的完整性和一致性。

在MySQL中,通过使用事务,可以保证对数据的操作是可靠和安全的。当对数据进行复杂的操作时,使用事务可以确保一组操作都成功或者都失败,防止出现数据不一致的问题。

举例:
49300c92f5364096a8f842eb68911d58.png

银行转账就是一个典型的事务,如果张三要给李四汇款,那么我们不能分开执行 给张三扣一千块,给李四转一千块,因为这样如果即使张三没有1000元,我们也会给李四转账。因此我们应该把这两个整理成为一个操作:先给张三扣钱,如果扣钱成功,再给李四汇款,这样如果张三的钱不够,我们就可以及时中断操作,而我们这样集成多个操作一起执行就叫做定义一个事务。

MySQL的事务时默认自动提交的,也就是说:当执行一条DML语句的时候,MySQL会立即隐式的提交事务。

控制事务:

  • 开始事务(BEGIN):用于明确一个事务的开始,之后的所有操作都属于同一个事务范围内。
  • 提交事务(COMMIT):用于将一个事务提交到数据库中,表示该事务所有的修改操作已经完成,数据已被持久化,该事务执行完成。
  • 回滚事务(ROLLBACK):用于撤销一个事务中发生的所有修改操作,使得数据回到事务开始前的状态。当一个事务无法完成时,需要撤销该事务的所有变更。

查看/设置事务提交方式

SELECT @@ autocommit;//查询当前事务提交状态SET @@ cutocommit =0;//1  自动提交   0    手动提交

2.提交事务

COMMIT;

3.回滚事务

ROLLBACK;

控制事务案例:

1.通过修改事务提交方式的方法来控制事务

我们可以通过代码来演示刚才所说的银行例子:
二人初始状态:
2378713ea5704f09b3ae967164e0dd41.png

我们把事务提交方式修改为手动提交后进行转账操作:

select @@autocommit;set @@autocommit =0;-- 1. 查询张三余额select * from account where name = '张三';-- 2. 张三的余额减少1000update account set money = money - 1000 where name = '张三';-- 3. 李四的余额增加1000update account set money = money + 1000 where name = '李四';

 我们此时如果执行这些语句:
结果:
704b22a5900a421cadd28ead911d34fe.png

这是因为我们把事务提交方式设置为了手动提交,这样系统执行语句并不会向数据库提交事务。

提交事务(commit):

select @@autocommit;set @@autocommit =0;-- 1. 查询张三余额select * from account where name = '张三';-- 2. 张三的余额减少1000update account set money = money - 1000 where name = '张三';-- 3. 李四的余额增加1000update account set money = money + 1000 where name = '李四';commit;

结果:

0285d4c3053945b4aaa6066604a3b599.png

需要注意的是如果我们不提交事务而不断执行操作,我们并不能够认为这些操作并没有执行,而是他被存储在了待执行操作里,只要我们提交了事务,这些操作就会一一执行:
 4d76fe505e5547c48e3f0f9a33ffa688.png

证明:我们尝试第一次只进行语句执行操作不提交,第二次进行语句执行操作和提交

操作结果:

cf2561af24f2475bb6a85de526283581.png

不通过修改事务提交方式来对事务进行操作:

开启事务

START TRANSACTION 或 BEGIN;

提交事务

COMMIT;

回滚事务

ROLLBACK;

代码: 

START TRANSACTION ;select * from account where name = '张三';update account set money = money - 1000 where name = '张三';update account set money = money + 1000 where name = '李四';COMMIT ;

结果:
07ed118ca8cb4eb78809e1cd9ee770f9.png

 事务四大特性:

  1. 原子性(Atomicity):在一个事务中,要么所有的操作都成功提交,要么全部回滚到事务开始前的状态,保证操作的原子性。

  2. 一致性(Consistency):事务执行结束后,数据应该保持一致性状态,不管事务执行成功或失败,数据库都应该满足预定义的完整性约束条件。

  3. 隔离性(Isolation):在一个事务执行的过程中,不会被其他并发的事务所干扰,保证了事务的隔离性。

  4. 持久性(Durability):事务提交后,其所做的修改将永久保存到数据库中。

并发事务问题:

脏读(Dirty Read):一个事务读取到了另一个事务尚未提交的数据,如果那个事务回滚或者修改了该数据,可能会造成数据不一致性。

不可重复读(Non-repeatable Read):一个事务在多次读取一个数据时,由于这个数据被其他事务修改导致其多次读取到不同的结果,这种情况下,第一个事务可能会认为数据被修改了多次,但实际上只是一个事务修改了。

幻读(Phantom Read):一个事务在多次读取一组数据时,由于其他事务插入了新的数据导致其读取到了不同的数据行,这种情况下,第一个事务可能会认为数据被修改或删除了,但实际上只是有新的行插入了。

解决这些问题的方法通常是加锁或者使用更高级的事务隔离级别。例如:

1. 通过在读取数据时加锁来避免脏读和不可重复读,例如使用行锁或表锁。

2. 提高事务隔离级别,例如升级到可重复读级别,这样防止了不可重复读,但不能完全避免幻读。

3. 使用更高级的隔离级别,例如串行化,这样可以同时避免脏读、不可重复读和幻读,但也会对性能造成一定的影响。

需要根据具体的业务场景、数据类型和访问模式选择合适的解决方案来保证数据的一致性和可靠性。

事务隔离级别:

  1. 读未提交(Read Uncommitted):一个事务可以读取另一个未提交的事务中的数据。本级别隔离最低,会存在脏读、不可重复度和幻读的问题,并发量最大,性能最优。

  2. 读已提交(Read Committed):读取另一并发事务提交的变化数据,读取操作时加锁,所以一定程度上可以避免脏读。但因为以读未提交为基础,因此仍然可能出现不可重复读和幻读的问题。

  3. 可重复读(Repeatable Read):在一个事务中多次读取同一记录时,它能够保证所读取的数据是一样的,该级别通过行级锁定已读取数据,避免了不可重复读,但仍可能出现幻读。

  4. 序列化(Serializable):所有事务顺序执行,即依次执行,不能并发执行,以此保证最高级别的隔离程度,也保证了隔离级别下的数据一致性。是最保险的事务隔离级别,但并发性最差,性能最低。

       Repeatable Read是MySQL的默认事务隔离级别

 语法:

查看当前事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {隔离级别};

SESSION与GLOBAL区别:

  • SESSION是指在当前客户端设置隔离级别
  • GLOBAL是指在所有客户端设置隔离级别。

 

总结:

        本片我们介绍了事务以及事务提交问题,MySQL数据库的基础篇就到此完结了,下一篇我会详细讲解什么是脏读,幻读,不可重复读。然后会持续更新进阶篇,也就是对各种语句的优化,欢迎大家持续阅读。

 

今天的内容到这里就结束了,感谢大家的阅读。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

8ec5ca9680024c9ca2ac25b357ec4821.png  

 

来源地址:https://blog.csdn.net/fckbb/article/details/131118338

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【MySQL数据库 | 第十五篇】事务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL总结(十二)数据库事务-详解

数据库事务1. 事务的应用场景说明什么是事务?在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。事务执行是一个整体,所有的 SQL
MySQL总结(十二)数据库事务-详解
2020-01-22

数据库基础-事务篇

1、事务是什么              事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 2、事务的四大特性        数据库事
数据库基础-事务篇
2016-09-22

《MySQL高级篇》十、数据库其他调优策略

文章目录 1.数据库调优的措施1.1调优的目标1.2 如何定位调优问题1.3 调优的维度和步骤第1步:选择适合的DBMS第2步:优化表设计第3步:优化逻辑查询第4步:优化物理查询第5步:使用Redis或 Memcached 作为缓存
2023-08-30

【Mysql数据库 第13章】MySQL的事务、事务的隔离级别、事务的保存点

文章目录 ?往期精彩知识? 一、什么是事务? 二、事务的开启关闭提交操作 三、事务的保存点 四、事务的特性 五、事务的隔离级别 作者:KJ.JK ?往期精彩知识?
2023-08-18

MySQL总结(十三)数据库事务隔离级别-概述

事务的隔离级别1.ACID事务的四大特性事务特性含义原子性(Atomicity)每个事务都是一个整体,不可再拆分,事务中所有的sql语句要么全部执行成功,要么全部执行失败。一致性(Consistency)事务在执行前数据库的状态与执行后数据库的状态保持一致。如
MySQL总结(十三)数据库事务隔离级别-概述
2021-10-29

MySQL数据库(二)事务

MySQL的存储引擎InnoDB支持事务,MyISAM不支持事物数据库事务的四大特性(ACID)原子性(atomic)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全
MySQL数据库(二)事务
2017-02-17

JDBC第三部分—blob类型的数据以及数据库事务

原文:https://www.cnblogs.com/summerHou/p/14646021.html
JDBC第三部分—blob类型的数据以及数据库事务
2020-02-27

数据库事务系列-MySQL跨行事务模型

说来和MySQL倒是有缘,毕业的第一份工作就被分配到了RDS团队,主要负责把MySQL弄到云上做成数据库服务。虽说整天和MySQL打交道,但说实话那段时间并没有很深入的理解MySQL内核,做的事情基本都是围绕着MySQL做管控系统,比较上层。好在周边都是MyS
数据库事务系列-MySQL跨行事务模型
2015-03-15

mysql数据库事务及隔离级别

事务的四大特性: 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各
mysql数据库事务及隔离级别
2021-09-18

MySQL数据库事务原理及应用

目录1 事务的使用1.1 事务概念1.2 事务的提交1.3 事务的常见操作2 事务隔离2.1 事务并发时出现的问题2.2 事务隔离级别1 事务的使用1.1 事务概念事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句
2023-04-27

MySQL INSERT锁与数据库事务优化

在MySQL中,INSERT操作会涉及到锁的问题,特别是在高并发的情况下。INSERT锁是指在对表进行INSERT操作时,MySQL会对待插入数据的表进行锁定,以确保数据的一致性和完整性。在数据库事务优化中,可以通过以下几个方面来优化IN
MySQL INSERT锁与数据库事务优化
2024-08-19

编程热搜

目录