天天看点

SQL 必知必会 Chapter 20 —— 管理事务处理SQL 必知必会 Chapter 20 管理事务处理

typora-copy-images-to: SQL 必知必会

文章目录

    • typora-copy-images-to: SQL 必知必会
  • SQL 必知必会 Chapter 20 管理事务处理
      • 20.1 事务处理
      • 20.2 控制事务处理
      • 20.3 小结

SQL 必知必会 Chapter 20 管理事务处理

20.1 事务处理

  • 通过确保成批的 SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性

前面使用的 Orders 表就是一个很好的例子。订单存储在 Orders 和

OrderItems 两个表中: Orders 存储实际的订单, OrderItems 存储订

购的各项物品。这两个表使用称为主键(参阅第 1课)的唯一 ID互相关

联,又与包含客户和产品信息的其他表相关联

  • 给系统添加订单的过程如下
    • 检查数据库中是否存在相应的顾客,如果不存在,添加他
    • 检索顾客的 ID
    • 在 Orders 表添加一行,它与顾客 ID相关联
    • 检索 Orders 表中赋予的新订单 ID
    • 为订购的每个物品在 OrderItems 表中添加一行,通过检索出来的 ID 把它与 Orders 表关联(并且通过产品 ID与 Products 表关联)
  • 事务处理是一种机制,用来管理必须成批执行的 SQL操作,保证数据库不包含不完整的操作结果
  • 要么完全执行,要么完全不执行
SQL 必知必会 Chapter 20 —— 管理事务处理SQL 必知必会 Chapter 20 管理事务处理
  • 可以回退的语句种类,事务处理用来管理 INSERT 、 UPDATE 和 DELETE 语句。不能回退 SELECT

    语句(回退 SELECT 语句也没有必要),也不能回退 CREATE 或 DROP 操作。事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销

20.2 控制事务处理

  • 管理事务的关键在于将 SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退
START TRANSACTION
...
COMMIT;
ROLLBACK;
           
  • 使用保留点,复杂的事务可能需要部分提交或回退
  • 占位符称为保留点
SAVEPOINT delete1;
ROLLBACK TO delete1;

BEGIN TRANSACTION
INSERT INTO Customers(cust_id, cust_name)
VALUES('1000000010', 'Toys Emporium');
SAVE TRANSACTION StartOrder;
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20100,'2001/12/1','1000000010');
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.99);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION

-- 上述是SQL SERVER的例子 ,注意保留点 LINE 7
           
  • 可以在 SQL代码中设置任意多的保留点,越多越好

20.3 小结

  • 介绍了事务是必须完整执行的 SQL语句块。我们学习了如何使用COMMIT 和 ROLLBACK 语句对何时写数据、何时撤销进行明确的管理;还学习了如何使用保留点,更好地控制回退操作。事务处理是个相当重要的主题,一课内容无法全部涉及。各种 DBMS对事务处理的实现不同,详细内容请参考具体的 DBMS文档