搞懂mysql事务有这一篇就够(呕心狂写1万字,保姆级mysql事务技巧)

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

一、事务概述

1.1、什么是事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

事务是一个事件处理的完整的过程。比如:存款、取款、转帐等操作都可以称之为一个事务。

1.2、事务的应用场景

我们想完成一次转帐业务,那么他会多次去访问我们的数据库。转帐实上就是从一个帐户上扣钱,在往一个帐户上加钱。这样我们执行了二次sql,如果其中一个sql失败,那么整个业务就没有执行成功。所有的sql都需要回滚,整个业务失败。

数据准备

#创建数据表
create table yh(
id int primary key auto_increment,
name varchar(20),
money double
);

-- 添加数据
insert into yh(name,money)values('张三', 1000),('李四', 1000);

案例:

模拟张三给李四转500元钱

分析:

先从张三的帐户减出500,在往李四的帐户加入500元

mysql> update yh set money=money-500 where name='张三';
Query OK, 1 rows affected (0.02 秒)

mysql> update yh set money=money+500 where name='李四';
Query OK, 1 rows affected (0.04 秒)

mysql> select * from yh;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
| 1  | 张三 | 500   |
| 2  | 李四 | 1500  |
+----+--------+-------+
2 行于数据集 (0.04 秒)

如果转帐时出现问题:

当张三账号上-500 元,服务器崩溃了。李四的账号并没有+500 元,数据就出现问题了。

因为他们是一个整体的业务,所以我们需要保证其中一条 SQL 语句出现问题,整个转账就算失败。只有两条 SQL 都成功了转账才算成功。这个时候就需要用到事务。

1.3、事务提交方式

mysql中有两种事务提交方式:

手动提交

自动提交

二、事务手动提交

2.1、手动提交的过程

事务执行成功的过程:开启事务->执行多条件SQL语句->成功->事务提交

事务执行失败的过程:开启事务->执行多条件SQL语句->失败->事务回滚

2.2、语法格式

格式:
start transaction; #开启事务 
commit; #提交事务 
rollback; #回滚事务 

案例:

事务的成功提交:模拟张三给李四转 500 元钱(成功) 目前数据库数据如下:

#开启事务
mysql> start transaction;
Query OK, 0 rows affected (0.01 秒)
#执行从张三帐户扣出500元
mysql> update yh set money=money-500 where name='张三';
Query OK, 1 rows affected (0.01 秒)
#执行往李四帐户加入500元
mysql> update yh set money=money+500 where name='李四';
Query OK, 1 rows affected (0.01 秒)
#提交事务
mysql> commit;
Query OK, 0 rows affected (0.08 秒)
#查看帐户
mysql> select * from yh;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
| 1  | 张三 | 0     |
| 2  | 李四 | 2000  |
+----+--------+-------+
2 行于数据集 (0.01 秒)

事务回滚:模拟李四给张三转 500 元钱(失败) 目前数据库数据如下:

#开启事务
mysql> start transaction;
Query OK, 0 rows affected (0.02 秒)
#执行从李四帐户扣出500元
mysql> update yh set money=money-500 where name='李四';
Query OK, 1 rows affected (0.01 秒)
#执行往张三帐户加入500元,但是加了600
mysql> update yh set money=money+600 where name='张三';
Query OK, 1 rows affected (0.01 秒)
#事务回滚
mysql> rollback;
Query OK, 0 rows affected (0.02 秒)
#查看帐户
mysql> select * from yh;
+----+--------+-------+
| id | name   | money |
+----+--------+-------+
| 1  | 张三 | 0     |
| 2  | 李四 | 2000  |
+----+--------+-------+
2 行于数据集 (0.01 秒)

三、事务自动提交

MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MySQL 默认开始自动提交事务。

如:

事务开始->update/delete/insert into->事务提交

3.1、自动提交事务

案例:

自动事务提交:往张三的帐户里存入1000元,目前数据库数据如下:

<
MySQL是一种关系型数据库管理系统,被广泛应用于各类网站、应用程序和企业系统中。它是由瑞典MySQL AB公司开发的,后来被Sun Microsystems收购,最终成为了Oracle公司的一部分。 MySQL以其高性能、稳定性和可靠性而闻名,不仅能处理大规模的数据处理需求,还具备较高的扩展性和可定制性。它支持多用户访问和并发操作,并提供了完善的安全性和权限管理机制,可灵活控制用户对数据的访问权限。 MySQL采用了客户端-服务器架构,其中客户端可以是各种编程语言实现的应用程序,而服务器则负责存储和处理数据。MySQL使用了一种基于SQL(Structured Query Language,结构化查询语言)的查询语言,通过执行SQL语句实现数据的存储、检索和管理。 MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY等,每个存储引擎都有其特定的优势和适用场景。同时,MySQL还支持事务处理和数据备份恢复等常用功能,保证了数据的完整性和可靠性。 MySQL拥有庞大的用户群体和强大的社区支持,用户可以通过官方文档、在线论坛和社交媒体等渠道获取帮助和交流经验。此外,MySQL还有丰富的第三方工具和插件生态系统,可提供更多功能和扩展性。 总之,MySQL作为一种成熟、可靠的关系型数据库管理系统,被广泛应用于各类场景。它的强大功能、高性能和可扩展性使其成为了开发者们首选的数据库解决方案之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据卷神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值