首页 > 数据库 >由浅入深学MySQL之事务全攻略

由浅入深学MySQL之事务全攻略

时间:2023-05-09 15:55:07浏览次数:70  
标签:由浅入深 语句 事务 MONEY 回滚 全攻略 MySQL 转账 1000

前言

从今天开始本系列就带各位小伙伴学习数据库技术。数据库技术是Java开发中必不可少的一部分知识内容。也是非常重要的技术。本系列教程由浅入深, 全面讲解数据库体系。 非常适合零基础的小伙伴来学习。


全文大约 【1707】 字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富案例及配图,让你更好的理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考...

一. 事务

事务这个概念不太容易理解,所以我们通过下面一个模拟转账的案例来让各位小伙伴理解事务到底是什么

1. 模拟转账

生活当中转账是转账方账户扣钱,收账方账户加钱。我们用数据库操作来模拟现实转账。

举个栗子: 数据库模拟转账。

#A 账户转账给 B 账户 1000 元。
#A 账户减1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;

#B 账户加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;

上述代码完成了两个账户之间转账的操作。

举个栗子: 模拟转账错误。

#A 账户转账给 B 账户 1000 元。
#A 账户减1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#断电、异常、出错...

#B 账户加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;

上述代码在减操作后过程中出现了异常或加钱语句出错,会发现,减钱仍旧是成功的,而加钱失败了!

注意: 每条 SQL 语句都是一个独立的操作,一个操作执行完对数据库是永久性的影响。

2. 事务的概念

事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

各位小伙伴是否理解了呢?那么我们再做个小小的总结:

事务就是让多个操作形成一个整体,在这个整体中的多个操作要么执行全成功,要么执行全失败。这就是事务的作用。

3. 事务的执行过程

开始过程:连接到数据库,执行一条DML语句。 上一个事务结束后,又输入了一条DML语句,即事务的开始。

结束过程如下:

1).提交:

a.显示提交:commit;

b.隐式提交:一条创建、删除的语句,正常退出(客户端退出连接)。

2).回滚:

a.显示回滚:rollback;

b.隐式回滚:非正常退出(断电、宕机),执行了创建、删除的语句,但是失败了,会为这个无效的语句执行回滚。

4. 事务的原理

数据库会为每一个客户端都维护一个空间独立的缓存区(回滚段),一个事务中所有的增删改语句的执行结果都会缓存在回滚段中,只有当事务中所有SQL语句均正常结束(commit),才会将回滚段中的数据同步到数据库。否则无论因为哪种原因失败,整个事务将回滚(rollback)。

5. 事务的特性

下面给各位小伙伴系统的说一下事务都具有哪些特性和功能。

通常叫做ACID原则,因为ACID是由下面四个单词的首字母构成的。

Atomicity(原子性): 表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败

Consistency(一致性) :表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态

Isolation(隔离性): 事务查看数据操作时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

Durability(持久性): 持久性事务完成之后,它对于系统的影响是永久性的。

6. 事务应用

应用环境:基于增删改语句的操作结果(均返回操作后受影响的行数),可通过程序逻辑手动控制事务提交或回滚。

举个栗子: 事务完成转账,A账户给B账户转账。

#1.开启事务
START TRANSACTION;|setAutoCommit=0;#禁止自动提交 setAutoCommit=1;#开启自动提交
#2.事务内数据操作语句
UPDATE ACCOUNT SET MONEY = MONEY-1000 WHERE ID = 1;
UPDATE ACCOUNT SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事务内语句都成功了,执行 COMMIT;
COMMIT;
#4.事务内如果出现错误,执行 ROLLBACK;
ROLLBACK;

注意: 开启事务后,执行的语句均属于当前事务,成功再执行 COMIIT,失败要进行 ROLLBACK。

二. 结语

最后在这里对本文核心要点进行总结:

  1. 事务能够在增删改操作中保证数据的一致性,所以在增删改操作中必须加入事务。

  2. 各位小伙伴一定要熟练的记住事务的操作过程以及ACID原则,非常重要哦。

标签:由浅入深,语句,事务,MONEY,回滚,全攻略,MySQL,转账,1000
From: https://www.cnblogs.com/qian-fen/p/17385366.html

相关文章

  • SQLite3 to MySQL
    SQLite3toMySQLAsimplePythontooltotransferdatafromSQLite3toMySQL.Ioriginallywrotethissimpleprogramasastandalonescriptandpublisheditasa gist asananswertothis StackOverflowquestion.Sincethenquitesomepeoplehavetakeni......
  • MySQL的redolog和binlog有哪些区别?
    redolog是innodb生成的日志,主要为了保证数据的可靠性;binlog是MySQLserver层面上生成的日志,主要用于pointintime恢复和主从复制。undolog主要用于事务的回滚和一致性快照读(MVCC多版本并发控制)。MySQL中的redolog、binlog的功能很像,那么有什么区别?区别如下:red......
  • using method 'mysql_native_password' failed with message
    错误消息:Connectionopenerror.Authenticationtohost'10.114.129.206'foruser'root'usingmethod'mysql_native_password'failedwithmessage:Readingfromthestreamhasfailed.DbType="MySql";ConfigId=""......
  • MySQL百万数据深度分页优化思路分析
    业务场景一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行分页查看,最常见的一种就是根据日期进行筛选。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万、千万条数据只是时间问题。瓶颈再现创建了一张user表,给create......
  • Centos7安装Mysql5.7.42
    安装前的清理查看是否安装了Mysql版本yumlistinstalledmysql*rpm–qa|grepmysql*如果安装了请自行卸载查看是否安装了MariaDBrpm-qa|grepmariadb如果安装了MariaDB,则进行删除操作rpm-e--nodepsmariadb-libs下载Mysql5.7.42wgethttps://cdn.mysql.com//Downl......
  • MySQL之json数据操作
    来源于:转载于:https://blog.csdn.net/asd529735325/article/details/107205214/目录1MySQL之JSON数据1.1建表添加数据1.2基础查询操作1.2.1一般json查询1.2.2多个条件查询1.2.3json中多个字段关系查询1.2.4关联表查询1.3JSON函数操作1.3.1官方json函数1......
  • 一条mysql 存在该记录则更新,不存在则插入记录的sql
    一条mysql教程存在该记录则更新,不存在则插入记录的sqlINSERTtable(auto_id,auto_name)values(1,‘yourname')ONDUPLICATEKEYUPDATEauto_name='yourname'ONDUPLICATEKEYUPDATE的使用如果您指定了ONDUPLICATEKEYUPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMAR......
  • NetBackup 10.2 新功能介绍:PostgreSQL 和 MySQL 自动化恢复达成
    原文来自:VERITAS中文社区2023-04-27在执行恢复任务时,手动提取、更新数据库和实例并将其附加到PostgreSQL和MySQL是常规操作。而在最新的NetBackup10.2版本中,执行恢复已不再需要上述手动流程,PostgreSQL和MySQL数据库的备份恢复变得更加便捷、高效。正所谓:NetBackup......
  • PG系、Oracle、MySQL数据库在特定场景下结果差异分析
    PG系、Oracle、MySQL数据库在特定场景下结果差异分析作者:余从佳更新时间:2022-07-0110:52人气值:416 本文主要介绍以PolarDBO引擎、ADBPG为代表的PG系数据库在某种特定事务场景下,其事务结果与Oracle、MySQL不同的现象,并分析该现象出现的原因。一、数据初始化 Cr......
  • MySQL(二十)锁(一)锁的概述与S、X锁
    MySQL(二十)锁(一)锁概述、S锁和X锁1概述锁是计算机协调多个线程或进程并发访问某一资源的机制。​ 在程序开发过程中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是一些敏感的数据(如金额、订单等),就需要保证这个数据在任何时刻都最多只有一个线程在访问,以保证......