Man*_*ngo 6 transaction rollback
这可能是一个简单的问题,但我想检查回滚事务的机制。
据我了解,步骤如下:
BEGIN TRANSACTION
(或同等学历)COMMIT
或者 ROLLBACK
据我所知,如果其中一个 SQL 语句失败,例如无效INSERT
或UPDATE
.
这表明上述过程,直到提交可以在手动输入的语句集合中。
但是,我在哪个阶段做出回滚的决定?这是否表明ROLLBACK
在程序中会发生更多的事情?换句话说,有人会手动回滚吗?
通过过程,我不一定指的是存储过程。我想某些应用程序可能会做同样的事情。
我认为这个问题一般适用于任何 SQL 数据库(当然,前提是它支持事务)。
换句话说,是否曾经手动回滚?
不,不是这样,除非有人正在进行测试,否则我几乎没有看到人们手动进行回滚。回滚是在存储过程或事务中指定的,您希望在其中输入完整的更改或根本不输入任何更改。
据我所知,如果其中一条SQL语句失败,例如无效的INSERT或UPDATE,事务将自动回滚。
根据事务的启动方式,如果事务处于显式开始事务并提交是的状态,它将在查询失败后完全回滚到其初始状态,而如果事务不在开始事务并提交状态下,它将存储完成的更改直到查询失败,并且从查询失败后,它将停止进行进一步的更改。
系统启动回滚的一个典型情况是当死锁发生时,SQL Server通过内部机制选择死锁受害者,终止事务,并且它可能会也可能不会回滚,具体取决于它是显式事务还是隐式事务。就像当正常的 select 语句被杀死时一样,它们本身也没有回滚。