c 與mysql中的事務處理

2021-04-23 10:59:43 字數 1915 閱讀 9104

c++是一門很複雜的語言,說它複雜是因為它難以控制的靈活性,但沒辦法,已經上了這條船,就暫且適應它複雜的規則。關於這門語言的細節的整理將集中在這篇文章裡。

為什麼是mysql的原始碼?

主要原因是:

一、我想弄明白資料庫裡事務實現的原理,底層的組織和資料結構,而我所接觸到的資料都只告訴我我不感興趣的東西。顯然只能求助於開源的資料庫,mysql和sqlite都是很好的選擇。它們提供的**很豐富,雖然我從來沒用過這兩種資料庫。

二、sqlite的原始碼是純c寫的,可讀性不敢恭維,乙個函式可以寫x00行,很是嚇人。mysql則是c++風格,比較對我的胃口。

為什麼是選擇資料庫事務處理作為切入點而不是其它什麼七七八八的?

主要原因是,事務處理在檔案和資料庫操作中應用得都很廣泛,可見它的重要性。

(2008/12/20)friend

友元是一種定義在類外部的普通函式,但它需要在類體內進行說明,為了與該類的成員函式加以區別,在說明時前面加以關鍵字friend。友元不是成員函式, 但是它可以訪問類中的私有成員。友元的作用在於提高程式的執行效率,但是,它破壞了類的封裝性和隱藏性,使得非成員函式可以訪問類的私有成員。

友元可以是乙個函式,該函式被稱為友元函式;友元也可以是乙個類,該類被稱為友元類。

友元函式的特點是能夠訪問類中的私有成員的非成員函式。友元函式從語法上看,它與普通函式一樣,即在定義上和呼叫上與普通函式一樣。

友元除了前面講過的函式以外,友元還可以是類,即乙個類可以作另乙個類的友元。當乙個類作為另乙個類的友元時,這就意味著這個類的所有成員函式都是另乙個類的友元函式。

//definition of ndbtransacion.

// ../mysql-5.0.22/ndb/include/ndbapi/ndbtransaction.hpp

class ndbtransaction

(2008/12/20) 事務(msdn)

事務是作為單個邏輯工作單元執行的一系列操作。乙個邏輯工作單元必須有四個屬性,稱為原子性、一致性、隔離性和永續性 (acid) 屬性,只有這樣才能成為乙個事務。

原子性

事務必須是原子工作單元;對於其資料修改,要麼全都執行,要麼全都不執行。

一致性

事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部資料結構(如 b 樹索引或雙向鍊錶)都必須是正確的。隔離

由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務識別資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是第二個事 務修改它之後的狀態,事務不會識別中間狀態的資料。這稱為可序列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執 行的狀態相同。

永續性

事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。

以上對事務的描述直接來自msdn的官方**。以下觀點僅個人yy,不代表事實。

原子性對於每個事務(原子工作單元)中都包含一系列操作序列,顯式的操作和隱式的操作,如顯示對錶進行增刪改操作,而隱式的操作則是對內部資料結構進行的調整,如增加刪除結點,維護樹的平衡性等。那麼在事務開始之前,必定會蒐集即將要執行的操作序列,這些操作將以某種形式的資料結構被儲存下來,執行操作時,則**這些操作對應的方法。

一致性一致性是否意味著在事務開始前,將儲存下本次事務的所有操作所涉及的相關資料的所有狀態,事務如果成功結束,那麼,修改這些操作所涉及資料的狀態,否則,在回滾時恢復原本的狀態?如果真的像我yy的那樣,那麼怎樣才能高效地儲存這些狀態,而這些狀態又應該以怎樣的資料形式被表示?

隔離性通過鎖機制應該可以很好解決這個問題。

永續性對系統的影響是持久的,我的理解是事務結束之後,不管是內部資料還是外部資料都將被儲存在持久型的資料容器(如硬碟)中。

yy完了,過一會兒看看mysql裡的事務相關聯的資料。

MySQL事務處理

start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...

mysql事務處理

mysql的事務處理主要有兩種方法 1.用begin,rollback,commit來實現 begin開始乙個事務 rollback事務回滾 commit 事務確認 2.直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,就直接執行!可以通過 set ...

mysql事務處理

事務都應該具備acid特徵。所謂acid是atomic 原子性 consistent 一致性 isolated 隔離性 durable 持續性 四個詞的首字母所寫,下面以 銀行轉帳 為例來分別說明一下它們的含義 1 原子性 組成事務處理的語句形成了乙個邏輯單元,不能只執行其中的一部分。換句話說,事務...