自动提交交易:
与数据库引擎实例的连接在自动提交模式下运行,直到BEGIN TRANSACTION
语句开始...
所以,你的第二个例子不适用。再向下:
在自动提交模式下,有时看起来好像数据库引擎的一个实例已经回滚了整个批处理,而不是一个 SQL 语句。如果遇到的错误是编译错误,而不是运行时错误,则会发生这种情况。编译错误会阻止数据库引擎构建执行计划,因此批处理中的任何内容都不会执行。
这是您的第一个示例处理的内容。
因此,没有人真正处理自动提交事务。
因此,让我们采取如下声明:
Alter TABLE EMP Add Age INT;
如果你在 Autocommit 模式下有一个打开的连接,执行上面的操作,并且它没有错误地完成,那么你会发现这个连接没有打开的事务,并且更改立即对任何其他连接可见。
如果你在 Implicit Transactions 模式下有一个打开的连接,执行上面的操作,并且它没有错误地完成,那么你会发现这个连接有一个打开的事务。任何需要模式锁定的操作都将阻止其他连接EMP
,直到您执行COMMIT
或ROLLBACK
。
如果你有一个打开的连接,你已经在其中执行BEGIN TRANSACTION
,执行上面的,并且它没有错误地完成 - 那么你将处于与隐式事务相同的情况。但是,在COMMIT
ed 或ROLLBACK
ed 之后,您的连接将恢复到 Autocommit 模式或 Implicit Transactions 模式(在调用 之前处于活动状态BEGIN TRANSACTION
)。