二十四、MySQL事务操作演示

1、事务

(1)事务简介:

(2)实际操作方式:

在执行MySQL语句时,系统默认自动提交,但是语句一旦出现报错,就可能导致数据出现大规模错误,所以我们要做的就是,将自动提交方式改为手动提交方式。

在改为手动提交之后,如果执行语句出现错误,数据库数据也不会发生更改,需要操作者确认提交,数据库数据才会发生更改。

(3)查看当前提交方式:

sql 复制代码
查看当前提交方式:
select @@autocommit;

2、操作案例:

建立一个数据库,存放着jom和kom的存款数据,jom存款10000元,kom存款5000元,现在jom给kom转账1000元,执行操作语句如下:

3、修改提交方式(方式一)

(1)错误语句:

此时为自动提交方式:

在这个错误语句中,第三条SQL语句不能正常执行,但前两条语句已经执行,这将导致jom的账户余额变为9000元,kom的账户余额不会发生改变。

(2)手动提交:

在(1)中,这样的错误是十分致命的,这将会导致数据的严重缺失,所以将提交方式设置为手动提交是必要的。

sql 复制代码
将提交方式设置为手动提交
set @@autocommit=0;

(3)手动提交示例:

执行如下语句:

sql 复制代码
select * from account where name='jom';
update account set money=money-1000 where name='jom';
update account set money=money+1000 where name='kom';

再次执行(1)中错误语句之后,然后再去刷新数据库,发数据库的数据并不会发生改变,这时需要执行commit;语句,数据才会发生改变。

sql 复制代码
提交数据:
commit;

执行结果:

(4)回滚操作:

回滚语句:

sql 复制代码
回滚操作:
rollback;

4、修改提交方式(方式二)

(1)手动提交:

(2) 提交方式:

在这种提交方式中,不需要设置commit参数,只需要执行如下语句即可:

sql 复制代码
# 第一步,开启事务
start transaction ;

(3)实际操作:

sql 复制代码
# 方式二:
# 第一步,开启事务
start transaction ;
# 第二部,执行指令
select * from account where name='jom';
update account set money=money-1000 where name='jom';
程序执行报错 ...
update account set money=money+1000 where name='kom';
select @@autocommit;
# 第三步,提交事务
commit;
# 第四步,回滚事务,结束当前事务
rollback;
相关推荐
科技小花7 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56618 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全9 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717219 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
绘梨衣5479 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
小江的记录本10 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi10 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai10 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw010 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl2002092510 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql