2010-11-23 50 views
3

我想創建一個程序,使用sql命令更新2個不同的表。我唯一擔心的是,如果程序更新了其中一個表,然後丟失了連接或其他內容,並且不更新其他表,那麼可能會有問題。有沒有一種方法,我既可以SQL多命令原子性問題

A.更新他們的確切同時

B.還原第一次更新,如果第二個失敗。

+1

我認爲你正在尋找「交易」的信息。查找有關在特定數據庫中使用事務的信息(您未在標籤中指定) – Kendrick 2010-11-23 16:42:28

回答

1

大多數SQL服務器支持事務,即排隊一系列操作,然後讓它們自動發生。要做到這一點,你換你的查詢,例如:

START TRANSACTION; 
*do stuff* 
COMMIT; 

您可以諮詢您的服務器的文檔以獲取更多信息什麼額外的功能支持。例如,MySQL中的事務的here is a more detailed discussion

2

根據數據庫,我建議使用存儲過程或函數根據所涉及的操作。他們支持:

  • MySQL的
  • 甲骨文
  • SQL服務器
  • PostgreSQL的

這些在本質上封裝了一個數據庫事務(原子 - 它要麼發生,或者它不完全不需要額外的重量來將查詢發送到數據庫......因爲它們已經存在於數據庫中,所以查詢被參數化(從SQL注入攻擊中安全),這意味着更少的數據被髮送 - 只要參數值。