【IT168技术文档】
数据库事务
数据库事务是其他事务模型的基础,本文讨论的事务都是基于数据库事务实现的,他们仅是隐藏了处理事务的复杂的或者容器专有的代码。当一个事务创建时不同数据库系统都有自己的规则。缺省地,SQL Server工作在自动提交的模式下,每个语句执行完后会立即提交,与此对照的是Oracle需要你包含一个提交语句。但是当一个语句通过OLEDB执行时,它执行完后一个提交动作会被附加上去。为了使下面的例子适用于Oracle,你需要去掉begin transation和commit transation两个语句,因为这两个语句会当作一个单独的事务来运行。
优势
◆ 所有的事务逻辑包含在一个单独的调用中
◆ 拥有运行一个事务的非常好的性能
◆ 独立于应用程序
限制
◆ 事务上下文仅存在于数据库调用中
◆ 数据库代码与数据库系统有关
例子:
CREATE PROCEDURE up_purchaseItem ( @customerId as int, @itemId int, @itemqty int) AS DECLARE @orderid int BEGIN TRANSACTION -- Update the inventory based on purchase UPDATE inventory SET qtyinstock = qtyinstock - @itemqty WHERE inventory.productid = @itemid; IF @@Error != 0 GOTO ERROR_HANDLER -- Insert the order into the database INSERT INTO orders VALUES (@customerId, @itemId, @itemqty, getdate()); IF @@Error != 0 GOTO ERROR_HANDLER SET @orderid = @@IDENTITY COMMIT TRANSACTION RETURN @orderid ERROR_HANDLER: ROLLBACK TRANSACTION SET NOCOUNT OFF RETURN 0 GO