mysql.js回滚_mysql事务的提交和回滚

START TRANSACTION

|BEGIN[WORK]

COMMIT[WORK][AND[NO]CHAIN][[NO]RELEASE]

ROLLBACK[WORK][AND[NO]CHAIN][[NO]RELEASE]

SET AUTOCOMMIT={0|1}

以上是mysql创建存储过程的官方语法。 我这里要说明的mysql事务处理多个SQL语句的回滚情况。比如说在一个存储过程中启动一个事务,这个事务同时往三个表中插入数据,每插完一张表需要判断其是否操作成功,如果不成功则需要回滚,最后一张表判断其插入成功之后commit。这里需要注意的是不能直接使用事务的collback,这样是不能实现回滚的或者说可能出现意外的错误。

那么我们需要的是一个条件判断,比如loop,因为MySql默认是会自动提交的,所以我们不用担心rollback之后条件退出而没有commit。

begin

loop_lable: loop start transaction;  insert into table1(f_user_id) values(user_id);

if row_count() < 1 then

set @ret = -1;

rollback;

leave loop_label;

end if;

insert into table2(f_user_id) values(user_id);

if row_count() < 1 then

set @ret = -1;

rollback;

leave loop_label;

end if;

insert into table3(f_user_id)

values(user_id);

if row_count() < 1 then

set @ret = -1;

rollback;

leave loop_label;

else

set @ret = 0;

commit;

leave loop_label;

end if;

end loop;

select @ret;

end

在Node.js中,可以使用mysql模块来连接MySQL数据库。要实现MySQL事务回滚,可以使用以下步骤: 1. 首先,需要在连接MySQL数据库时开启事务。可以使用以下代码: ```javascript connection.beginTransaction(function(err) { if (err) { throw err; } // 事务开始 }); ``` 2. 然后,在执行SQL语句时,需要将连接对象作为参数传递给query()方法,并在回调函数中处理错误。如果发生错误,可以使用rollback()方法回滚事务。例如: ```javascript connection.query('INSERT INTO table1 SET ?', { name: 'John' }, function(error, results, fields) { if (error) { return connection.rollback(function() { throw error; }); } connection.query('INSERT INTO table2 SET ?', { name: 'Jane' }, function(error, results, fields) { if (error) { return connection.rollback(function() { throw error; }); } connection.commit(function(error) { if (error) { return connection.rollback(function() { throw error; }); } console.log('Transaction completed successfully.'); }); }); }); ``` 在上面的代码中,如果第一个INSERT语句或第二个INSERT语句中的任何一个出现错误,都会回滚事务。 3. 最后,需要在连接对象上调用commit()方法来提交事务。如果提交事务时发生错误,可以使用rollback()方法回滚事务。例如: ```javascript connection.commit(function(error) { if (error) { return connection.rollback(function() { throw error; }); } console.log('Transaction completed successfully.'); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值