自动提交事务

自动提交事务

SQL Server 2008 R2

自动提交模式是 SQL Server 数据库引擎的默认事务管理模式。每个 Transact-SQL 语句在完成时,都被提交或回滚。如果一个语句成功地完成,则提交该语句;如果遇到错误,则回滚该语句。只要没有显式事务或隐性事务覆盖自动提交模式,与数据库引擎实例的连接就以此默认模式操作。自动提交模式也是 ADO、OLE DB、ODBC 和 DB 库的默认模式。

在 BEGIN TRANSACTION 语句启动显式事务隐性事务设置为开启之前,与数据库引擎实例的连接一直以自动提交模式操作。当提交或回滚显式事务或关闭隐性事务模式时,连接将返回到自动提交模式。

如果设置为 ON,SET IMPLICIT_TRANSACTIONS 会将连接设置为隐式事务模式。如果设置为 OFF,则使连接恢复为自动提交事务模式。

在自动提交模式下,有时看起来好像数据库引擎实例回滚了整个批处理而不是仅仅一个 SQL 语句。当遇到的错误是编译错误而非运行时错误时,会发生这种情况。编译错误会阻止数据库引擎生成执行计划,这样批处理中的任何语句都不会执行。尽管看起来好像是回滚了产生错误的语句之前的所有语句,但该错误阻止了批处理中的所有语句的执行。在下面的示例中,由于发生编译错误,第三个批处理中的 INSERT 语句都没有执行。但看起来好像是前两个 INSERT 语句没有执行便进行了回滚。

USE AdventureWorks2008R2;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBatch VALUSE (3, 'ccc');  -- Syntax error.
GO
SELECT * FROM TestBatch;  -- Returns no rows.
GO

在下面的示例中,第三个 INSERT 语句产生运行时重复主键错误。由于前两个 INSERT 语句成功地执行并且提交,因此它们在运行时错误之后被保留下来。

USE AdventureWorks2008R2;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBatch VALUES (1, 'ccc');  -- Duplicate key error.
GO
SELECT * FROM TestBatch;  -- Returns rows 1 and 2.
GO

数据库引擎使用延迟的名称解析,直到执行时才解析对象名称。在下面的示例中,执行并提交了前两个 INSERT 语句,在第三个 INSERT 语句由于引用一个不存在的表而产生运行时错误之后,这两行仍然保留在 TestBatch 表中。

USE AdventureWorks2008R2;
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3));
GO
INSERT INTO TestBatch VALUES (1, 'aaa');
INSERT INTO TestBatch VALUES (2, 'bbb');
INSERT INTO TestBch VALUES (3, 'ccc');  -- Table name error.
GO
SELECT * FROM TestBatch;  -- Returns rows 1 and 2.
GO

在Spring MVC中,自动提交事务是通过使用Spring的事务管理器实现的。Spring提供了多种事务管理器的实现,其中最常用的是基于注解的声明式事务管理。 要实现自动提交事务,你可以按照以下步骤进行操作: 1. 配置数据源:首先,你需要在Spring配置文件中配置数据源,以便连接到数据库。你可以使用Spring提供的内置数据源或者自定义数据源。 2. 配置事务管理器:接下来,你需要配置事务管理器。Spring提供了多种事务管理器的实现,例如DataSourceTransactionManager、HibernateTransactionManager等。你可以根据你的具体需求选择适合的事务管理器。 3. 配置事务通知:在Spring MVC中,你可以使用@Transactional注解来标记需要进行事务管理的方法。当方法被调用时,事务管理器会自动开启一个事务,并在方法执行完成后根据方法的执行结果决定是提交事务还是回滚事务。 下面是一个示例代码,演示了如何在Spring MVC中实现自动提交事务: ```java @Controller public class UserController { @Autowired private UserService userService; @Transactional @PostMapping("/user") public String createUser(User user) { userService.createUser(user); return "redirect:/users"; } } ``` 在上面的代码中,我们使用了@Transactional注解来标记createUser方法。当该方法被调用时,事务管理器会自动开启一个事务,并在方法执行完成后根据方法的执行结果决定是提交事务还是回滚事务。 需要注意的是,为了使@Transactional注解生效,你需要在Spring配置文件中启用事务管理器的支持。可以通过在配置文件中添加以下代码来实现: ```xml <tx:annotation-driven/> ``` 这样,Spring MVC就会自动提交事务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值