mysql实现事务的提交与回滚的实例详解
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,最近要对数据库的数据进行一个定时迁移,为了防止在执行过程sql语句因为某些原因报错而导致数据转移混乱,因此要对我们的脚本加以事务进行控制。首先我们建一张tran_test表CREATE TABLE t
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
云南咖啡
深圳市人人互联网科技有限公司
互联网金融 科技
互联网金融 科技金融
互联网 卓越科技
互联网科技论文
苏州大垚互联网科技
新华互联网科技校企合作
湖南洣水互联网科技有限公司扣款
中国航天科技大学国际工业互联网
朱啸虎曾投资哪些互联网科技企业
美国互联网科技实力
上海京穆互联网科技有限公司
杭州披云加互联网科技有限公司
全球科技与互联网公司市值变化
世界互联网科技成果奖
江苏互联网智能科技产品出厂价
数字互联网科技有限公司
数字科技和互联网金融哪个好
瑞安市蟠桃会互联网科技有限公司
广州为想互联网科技有限公司
互联网科技工作委员会副主任毛军
智能科技公司是互联网公司吗
远拓互联网科技
菲比寻常互联网科技
卓越科技互联网 招聘
老年人脱离互联网科技的作文
互联网科技大赛获奖感言
科技赋能视角下互联网保险发展
江苏互联网科技小贷