SQL必知必會 筆記 第二十章 管理交易處理,sql必知

來源:互聯網
上載者:User

SQL必知必會 筆記 第二十章 管理交易處理,sql必知
20.1交易處理

交易處理(transaction processing)可以用來維護資料庫的完整性,它保證成批的SQL操作要麼完全執行,要麼完全不執行。
關聯式資料庫設計把資料存放區在多個表中,使資料更容易操縱、維護和重用。不用深究如何以及為什麼進行關聯式資料庫設計,在某種程度上說,設計良好的資料庫模式都是關聯的。
事務(transaction)指一組SQL語句。
回退(rollback)指撤銷指定SQL語句的過程。
提交(commit)指將未儲存的SQL語句結果寫入資料庫表。
保留點(savepoint)指交易處理中設定的臨時預留位置(placeholder),你可以對它發布回退(與回退整個事物處理不同)。
可以回退那些語句?
事物處理用來管理INSERT、UPDATE和DELETE語句。不能回退SELECT語句,也不能回退CREATE或DROP操作。交易處理中可以使用這些語句,但進行回退時,它們不被撤銷。

20.2控制交易處理

事物處理實現的差異:不同DBMS用來實現事物處理的文法有所不同。
管理交易處理的關鍵在於將SQL語句組分解為邏輯塊,並明確規定資料何時應該回退,何時不應該回退。

BEGIN TRANSACTION……COMMIT TRANSACTION
20.2.1使用ROLLBACK

SQL的ROLLBACK命令用來回退SQL語句

DELETE FROM Order;ROLLBACK;
20.2.2使用COMMIT

一般的SQL語句都是直接針對資料庫表執行和編寫的。這就是所謂的隱含提交,即提交操作是自動進行的。但是,在交易處理塊中,提交不會隱含的進行。
SQL Server中例子

BEGIN TRANSACTIONDELETE OrderItems WHERE order_num = 12345DELETE Orders Orders WHERE order_num = 12345COMMIT TRANSACTION;

Oracle中例子

DELETE OrderItems WHERE order_num = 12345;DELETE Orders Orders WHERE order_num = 12345;COMMIT;

從系統中刪除完全訂單12345.因為涉及更新兩個資料庫表,所以事物處理塊來保證訂單不被部分刪除。最後COMMIT語句僅在不出錯時寫出更改。如果第一條DELETE起作用,但第二條失敗,則DELETE不會提交。

20.2.3使用保留點

簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個事物處理。但是,只是對簡單的交易處理才能這樣做,更複雜的交易處理可能需要部分提交或回退。
為了支援回退部分交易處理,必須能在交易處理模組中合適的位置放置預留位置。這樣,如果需要回退,可以回退到某個預留位置。
在MySQL和Oracle中建立預留位置,可使用如下SAVEPOINT語句:

SAVEPOINT delete1;ROLLBACK TO delete1;

保留點越多越好:可以在SQL代碼中設定任意多的保留點,越多越好,為什麼呢?因為保留點越多,你就越能按自己的意願靈活地進行回退。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.