//事务处理相关概念
事务:一组SQL语句
回退:撤销指定SQL语句的过程
提交:将未存储的的SQL语句结果写入数据库表
保留点:设置的临时占位符,可以对它发布回退,与回退整个事务不同
事务处理用于管理INSERT、UPDATE、DELETE语句
//标识事务处理块
SQL Server:
BEGIN TRANSACTION
...
COMMIT TARNSACTION
MySQL:
START TRANSACTION
...
Oracle:
SET TRANSACTION
...
PostgreSQL:
BEGIN
...
//使用ROLLBACK撤销SQL语句
DELETE FROM Orders
ROLLBACK
//使用COMMIT,因为在事务处理块中不会隐式提交(自动进行保存提交)
SQL Server:
BEGIN TARNSACTION
DELETE OrdersItems WHERE order_num=12345
DELETE Orders WHERE ordee_num=12345
COMMIT TRANSACTION//在以上两个DELETE语句都正常时才会保存提交
Oracle:
SET TRANSACTION
DELETE OrdersItems WHERE order_num=12345
DELETE Orders WHERE ordee_num=12345
COMMIT
//使用保留点,用于回退或保留部分事务
My SQL,Oracle: SAVEPOINT deletel//应该唯一标识
ROLLBACK TO deletel
SQL Server: SAVE TRANSACTION deletel
ROLLBACK TRANSACTION deletel
//完整的SQL Server例子
BEGIN TRANSACTION
INSERT INTO Customers(cust_id,cust_name)
VALUES(1000001,'Toy');
SAVE TRANSACTION StartOrder;
INSERT INTO Orders(order_num,order_date,cust_id)
VALUES(20100,'2001/12/1',1000001);
IF @@ERROR <>0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num,order_item,prod_id,quantity,item_price)
VALUES(20100,1,'BR01',100,5.49);
IF @@ERROR <>=0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num,order_item,prod_id,quantity,item_price)
VALUES(20100,2,'BR03',100,10.49);
IF @@ERROR <>=0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION