mysql实现事务的提交与回滚的实例详解
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制。首先我们建一张tran_test表CREATE TABLE t
千家信息网最后更新 2025年02月07日mysql实现事务的提交与回滚的实例详解
最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制。
首先我们建一张tran_test表
CREATE TABLE tran_test( f1 VARCHAR(10) NOT NULL, f2 INT(1) DEFAULT NULL, PRIMARY KEY (f1) )ENGINE=INNODB CHARSET=utf8
我想对tran_test插入两条数据,但是为了防止插入中报错,因此我要把插入语句控制在一个事务内。
这时候,如果你查一下有些人的文章,许多时候会给出你这么一条答案。
START TRANSACTION; INSERT INTO tran_test VALUES('A',1); INSERT INTO tran_test VALUES('B',2); ROLLBACK;
或
START TRANSACTION; INSERT INTO tran_test VALUES('A',1); INSERT INTO tran_test VALUES('B',2); COMMIT;
看上去很简单的sql语句,并且这两句也确实能实现提交或回滚。
然而这真的能达到我们的目的吗?答案是否定的。
比如第一段,它是将你在事务中的sql语句无论对错全部进行ROLLBACK。这样绝对的回滚使得你的sql没有任何意义了。
因此我们想要真正的控制好事务,我的思路是对要执行的sql进行异常检测。如果sql没有出现异常,COMMIT,如果捕获到了异常,则ROLLBACK。
这时候,我们就需要建一个存储过程来捕获异常。执行成功时进行COMMIT,sql执行失败时则进行ROLLBACK。
两种思路可以达到我想要的效果。
第一种是对我们要执行的sql进行异常捕获,我们再定义一个变量t_error,当捕获到异常的时候,让t_error=1。再对t_error进行条件判断,如果t_error=1则进行ROLLBACK,否则进行COMMIT。
DROP PROCEDURE IF EXISTS t_test; DELIMITER // CREATE PROCEDURE t_test() BEGIN DECLARE t_error INTEGER; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error = 1; START TRANSACTION; INSERT INTO tran_test VALUES('A',1); INSERT INTO tran_test VALUES('B',2); IF t_error = 1 THEN ROLLBACK; ELSE COMMIT; END IF; END// CALL t_test();
另一只则是第一种的简化,即捕获到异常直接进行ROLLBACK,如果没捕获到异常,直接COMMIT
DROP PROCEDURE IF EXISTS t_test; DELIMITER // CREATE PROCEDURE t_test() BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK; START TRANSACTION; INSERT INTO tran_test VALUES('A',1); INSERT INTO tran_test VALUES('B',2); COMMIT; END// CALL t_test()
这样,这两个insert语句便真正的被控制在了一个事务内了。
以上实例大家可以在本次测试一下,如果有其他补充和疑问可以直接联系小编,感谢大家对的支持。
事务
语句
数据
控制
思路
时候
答案
过程
实例
成功
混乱
两个
中报
原因
变量
对错
意义
我要
效果
数据库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
sql服务器怎么取名字
数据库 关闭连接
服务器如何封ip
盐城中赢网络技术
韩冰教授互联网科技博主
金税盘怎样从数据库读取
云南曲靖软件开发公司
嘉兴企业软件开发系统
服务器电源计算
sra数据库怎么转换矩阵
飞机聊天服务器填什么
北京路游网络技术有限公司
软件开发咨询服务协议书
便民服务平台软件开发
明扬环宇网络技术襄阳
腾讯云服务器鲁大师跑分
公司服务器端口映射安全吗
河北java软件开发建设
显示数据库中表的数据
广东现代软件开发价钱
怎么将数据库中表中心的数据删除
数据库共享如何解决
天谕红叶染心服务器
2019网络安全大检查内容
网络技术解析
网络安全的简笔字
电信的网络技术工程师笔试题
和平精英在哪里看服务器的房间
美国的网络安全架构
vb如何保存输入数据库