=============================================================
标题:SQL事务处理
文献:《SQL必知必会》
日期:2011.4.22
姓名:朱铭雷
=============================================================
事务处理(transaction processing)
可保证一组密切相关的SQL操作要么完全执行,要么完全不执行,以维护数据库的完整性。
示例(SQL Server)(Sams Teach Yourself SQL in 10 Minutes)
BEGIN TRANSACTION
--1添加用户信息
INSERT INTO Customers(cust_id, cust_name)
VALUES('1000000010', 'Toys Emporium');
SAVE TRANSACTION StartOrder;
--2添加订单信息
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20100, '2001-12-01', '1000000010');
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
--3添加订单物品信息(1)
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20010, 1, 'BR01', 100, 5.49);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
--4添加订单物品信息(2)
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20010, 2, 'BR03', 100, 10.99);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION
如果不使用事务处理,而执行到第2步时突然出现问题,导致1,2执行,而3,4未执行。那在数据库中就会出现只有订单信息,没有订单物品信息的空订单。使用事务处理,在2,3,4任意一步操作出现错误时,将回退到保存点StartOrder。这样数据库中则不会出现空订单。
回退(ROLLBACK)
撤销指定的SQL语句,回到之前某个保留点,以恢复数据库到某个已知的安全状态。
保留点(SAVEPOINT)
事务处理中设置的临时占位符(placeholder),用于事务回退。
可回退语句
可回退INSERT,UPDATE,DELETE语句,不可回退SELECT,CREATE,DROP语句(能够在事务处理中执行,但回退时,不被撤销)。
提交(COMMIT)
将未存储的SQL语句结果写入数据库表。