人亦已歌 发表于 2023-1-20 10:55:34

Mysql数据库核心技术(二十三)innodb事务

首先说一下何为事务。由于在实际工作中,往往都需要连续执行一系列sql语句来完成一件事。例如:银行的转账操作,从A账户转出,B账户转入,这才算一次完整的转账操作。假设有这样一种情况:当A账户转出后,由于意外因素导致B账户转入的操作没有执行,那将是一个天大的问题,这时我们就需要用到事务来操作了。
事务是将多条sql语句放在一个包中,这些语句要么一起执行,要不一起不执行。
而且事务还支持回滚,当我们确认操作是正确时,执行提交事务操作才会修改数据库中的数据。



下面我们先来创建一张测试表
create table bank(`card` char(4) primary key comment '卡号',`money` decimal(10,2) not null)engine=innodb charset=utf8;语句解释:
创建一张bank表,表中有card和money两个字段,数据引擎为innodb,存储编码为utf8.执行结果如下:


插入两条数据:
insert into bank values ('1001',1000),('1002',1);

下面我们模拟从卡号为1001的账户中转账给卡号为1002的账户。
1、开启事务
begin;2、执行sql语句
update bank set money=money-100 where card='1001';
update bank set money=money+100 where card='1002';

执行结果如下:


此时,假设我们的操作不正确,可以通过回滚事务来恢复数据。
3、回滚事务
rollback;

此时,数据又变成了原始数据。在生产环境中,开启事务与提交事务都是通过编程语言根据逻辑判断结果来执行的。
下面我们来提交事务,事务一经提交,数据库中的数据就发生了改变,无法再回滚。
4、提交事务
commit;我们重新操作一遍,如下:


另外,事务还支持设置回滚点,允许我们回滚到指定的位置。
5、设置回滚点
savepoint a1;

语句解释:
设置回滚点a1,回滚时只要rollback to a1即可;

下面来做实验:



ok,以上的就是事务的核心操作,大家自己动手练习一下。

高高高 发表于 2023-1-31 00:09:49

很有条理,每一节都是干货

马永明 发表于 2023-1-31 07:44:26

非常好,很容易理解

kndanny 发表于 2023-1-31 15:17:15

老师辛苦了

hyjzan 发表于 2023-2-1 03:49:44

顶起来,学mysql的快来看

追梦人 发表于 2023-2-1 19:52:16

这么好的教程希望更多人看到

沁儿 发表于 2023-2-2 10:57:22

我又来卷了

逍肖11 发表于 2023-2-14 22:07:56

讲的很清楚,好教程!

hongred 发表于 2023-2-16 09:59:53

教程最难得是将各类知识点归纳起来讲,这样才不凌乱,楼主做到了

fanjin_08 发表于 2023-2-18 19:26:58

已经学了一大半了,重新过来复习一下
页: [1] 2 3 4
查看完整版本: Mysql数据库核心技术(二十三)innodb事务