开启了事务,在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的话,会出现啥情况?的主要内容,如果未能解决你的问题,请参考以下文章