qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          數據庫中的事物處理

           數據庫
            數據庫的更新通常都是由客觀世界的所發生的事件引起的。為保證數據庫內容的一致,就要將數據庫的一組操作作為一個整體來進行,要么全部成功完成,要么全部失敗退出。如果由于故障或其它原因而使一組操作中有一些完成,有一些未完成,則必然會使得數據庫中的數據出現不一致,從而使得數據庫的完整性受到破壞。因此,更新操作序列必須作為一個整體在DBMS執行時出現,即“要么全做,要么全不做”。SQL提供了事務處理的機制,來幫助DBMS實現上述的功能。
            事務處理
            事務處理(TRANSACTION)的每個語句是由一個或多個SQL語句序列結合在一起所形成的一個邏輯處理單元。事務處理中句都是完成整個任務的一部分工作,所有的語句組織在一起能夠完成某一特定的任務。DBMS在對事務處理中的語句進行處理時,是按照下面的約定來進行的,這就是“事務處理中的所有語句被作為一個原子工作單位,所有的語句既可成功地被執行,也可以沒有任何一個語句被執行”。DBMS負責完成這種約定,即使在事務處理中應用程序異常退出,或者是硬件出現故障等各種意外情況下,也是如此。在任何意外情況下,DBMS都負責確保在系統恢復正常后,數據庫內容決不會出現“部分事務處理中的語句被執行完”的情況。
            sql語言
            sql語言為事務處理提供了兩個重要的語句,它們是COMMIT和ROLLBACK語句。它們的使用格式是:
            COMMIT WORK
            ROLLBACK WORK
            COMMIT語句用于告訴DMBS,事務處理中的語句被成功執行完成了。被成功執行完成后,數據庫內容將是完整的。而ROLLBACK語句則是用于告訴DBMS,事務處理中的語句不能被成功執行。這時候,DBMS將恢復本次事務處理期間對數據庫所進行的修改,使之恢復到本次事務處理之前的狀態。
            事務處理:
          QSqlDatabase::database().transaction();
          QSqlQuery query;
          query.exec("SELECT id FROM employee WHERE name = 'Torild Halvorsen'");
          if (query.next())
          {
          int employeeId = query.value(0).toInt();
          query.exec("INSERT INTO project (id, name, ownerid) "
          "VALUES (201, 'Manhattan Project', "
          + QString::number(employeeId) + ")");
          }
          QSqlDatabase::database().commit();
            如果數據庫引擎支持事務處理,則函數QSqlDriver::hasFeature(QSqlDriver::Transactions)將返回 真。
            可以通過調用QSqlDatabase::transaction()來初始化一個事務處理。之后執行你想在該事務處理的工作。
            完了再執行QSqlDatabase::commit()來提交事務處理或QSqlDatabase::rollback()取消事務處理。

          posted on 2014-09-16 09:51 順其自然EVO 閱讀(197) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永胜县| 鹰潭市| 梅州市| 宝坻区| 泗阳县| 汾西县| 剑阁县| 运城市| 钦州市| 郎溪县| 赤水市| 九龙城区| 错那县| 河北省| 柏乡县| 乌拉特中旗| 民乐县| 新民市| 岗巴县| 资源县| 洛阳市| 昌平区| 德令哈市| 霍城县| 丰顺县| 怀仁县| 陇南市| 大余县| 库车县| 罗山县| 麦盖提县| 潼南县| 甘谷县| 交口县| 利津县| 新乡市| 阳江市| 嘉禾县| 江城| 西贡区| 天水市|