开启了事务,在sql出错的时候不执行commit,也没执行rollback的话,会出现啥情况?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开启了事务,在sql出错的时候不执行commit,也没执行rollback的话,会出现啥情况?相关的知识,希望对你有一定的参考价值。

关闭了自动提交,当@@Error>0时不执行commit,但也没写rollback,最后会是什么情况

有可能出现死锁。
因为在对表做更新操作的时候,就会在表上加锁,事务没提交,锁是不会释放的,这是数据库为了保证数据完整性的操作。那么在某个程序写数据库表的时候,其他任何程序对该表是无法进行读取和写入的,处于等待状态。
如果出现了循环等待,A等B,B等C,C等A那么就出现了死锁。
参考技术A 程序运行过程中处于锁的状态,直到程序结束后,释放事务,数据不会被更新本回答被提问者和网友采纳 参考技术B 什么意思?
只有当@@Error<0时才commit,既然没有错误就提交了,也就不会再回滚了。
if(@@Error<0)
Commit;
else
RollBack;

参考资料:百度一下

(MYSQL学习笔记4)事务的开启提交回滚

使用事务要注意以下三点:

1、在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

2、事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

3、事务用来管理 insert,update,delete 语句


MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务

  • ROLLBACK 事务回滚

  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交

  • SET AUTOCOMMIT=1 开启自动提交


例如:

SET AUTOCOMMIT = 0;
BEGIN;
INSERT INTO km_xtyh (YHID,YHMC) VALUE (‘asdjoi213hjsh‘,‘李四‘);
COMMIT;

解读:

        先将自动提交给关闭了~然后用“BEGIN”开启事务,之后虽然是插入语句,但是还没有进行“COMMIT”操作,并没有真正的提交,该条数据只是暂时性存在数据库中(注意:此时数据库里已经有“李四”这一条数据),如果执行了"COMMIT"语句,该条数据将永久性插入数据库;

        如果不执行"COMMIT"执行的是另外一个语句"ROLLBACK",则数据库中将不会存在该条记录,数据没有真正插入成功。

本文出自 “w1sw” 博客,请务必保留此出处http://cfdeng.blog.51cto.com/9873532/1944349

以上是关于开启了事务,在sql出错的时候不执行commit,也没执行rollback的话,会出现啥情况?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的事务的处理

MySQL的事务的处理

SQL中事务有啥好处 如何使用事务

(MYSQL学习笔记4)事务的开启提交回滚

hibernate的save不执行

SQL语句如何rollback