mysql doesn't rollback when error occurs when using transaction

frebpwbc  于 2024-01-05  发布在  Mysql
关注(0)|答案(1)|浏览(171)

这是一个非常简单的SQL命令:

  1. start transaction;
  2. insert into new_data(textvalue) values ("data1");
  3. insert into new_data(brak) values ("data2");
  4. commit;

字符串
所以表new_data只有一个字段叫做“textvalue”.“brak”不存在.我想因为我在真实的开始声明“start transaction”所以当第二次插入发生错误时,第一次插入将回滚.然而,我检查了数据库,第一次插入仍然成功,表有一个新的roll“data1”.
有人能解释一下为什么会发生这种情况吗?
谢谢

e4eetjau

e4eetjau1#

Mysql不会为你回滚,如果你看到错误,你需要运行回滚。如果你在workbranch中运行脚本,它会一个接一个地运行你的sql,所以最终它是提交的。
这个例子向你展示了一个存储过程如何为你回滚.

  1. DELIMITER $$
  2. CREATE PROCEDURE `sp_to_insert`()
  3. BEGIN
  4. DECLARE `_rollback` BOOL DEFAULT 0;
  5. DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
  6. START TRANSACTION;
  7. INSERT INTO new_data(textvalue) VALUES ("data1");
  8. INSERT INTO new_data(brak) VALUES ("data2");
  9. IF `_rollback` THEN
  10. ROLLBACK;
  11. ELSE
  12. COMMIT;
  13. END IF;
  14. END$$
  15. DELIMITER ;

字符串

展开查看全部

相关问题