2010-12-23 28 views
2

儘管如此,我還沒有得到MySQL中的事務?它的優點是什麼,我如何申請?MySQL中的事務是什麼?

請簡單說明,但不是那麼簡單。我知道DB是什麼..

回答

4

事務是一組不comitted(換句話說,保存),直到你執行commit命令的變化。所以事務處理允許你說「我想對數據庫進行所有這些更改,但是在完成整個列表之前並不實際保存更改。」如果出現問題,您可以回滾(換句話說,撤消)您正在製作的任何更改。

+0

我想我明白了你的聰明解釋。謝謝。 – dino 2010-12-23 13:50:30

3

事務(不僅在MySQL中)是一些代碼執行的方式。但是,如果出現問題,交易將被撤銷,如果整個過程沒有完成,則不做任何更改。

例子:

Transaction begins: 
doA(); 
doB(); 
doC(); 
Transaction ends: 
doD(); 

如果A失敗,什麼都沒有改變。
如果B失敗,沒有任何變化。
如果C失敗,沒有任何變化。
如果D失敗,A,B,C仍然執行。

如果在事務內部失敗了一個所謂的回滾操作,它將完成所有的更改。

2

事務不限於MySql - 大多數RDBMS使用它們。

當你正在做幾個相關的操作並需要它們以原子方式運行時,它們非常有用 - 也就是說,它們全部發生或沒有發生。

例如 - 您想要保存訂單和所有的訂單商品。這最好是在交易中完成,因爲沒有其他交易就沒有多少意義。

wikipedia文章內容豐富。

交易提供了一個「全有或全無」的主張,指出在數據庫中執行的每個工作單元必須完整或完全沒有任何影響。此外,系統必須將每個事務與其他事務隔離開來,結果必須符合數據庫中現有的約束,並且成功完成的事務必須寫入持久存儲。

7

事務處理當您有幾個相關的SQL語句時,它們必須成功或失敗,並將其作爲一個單一工作單元來提供幫助。

典型的例子是在兩個銀行賬戶之間轉移資金。你不希望撤回成功,存款失敗;您的銀行不希望存款成功,除非撤回。

事務監視事務中執行的所有SQL以確保全部成功。如果有任何失敗,它會回滾所有的語句。

+0

謝謝,這也是很好的解釋 – dino 2010-12-23 13:57:12

1

wikipedia頁面這樣做是正義的。但基本上,一個事務允許你將語句作爲一個動作單獨執行。它也可以讓你消除錯誤。 也就是說

START TRANSACTION; 
DELETE FROM foo WHERE bar = baz; 
ROLLBACK; 

將沒有變化。

交易也是孤立的。這意味着第一個聲明所看到的視圖與最後一個視圖相同。如果我們這樣做

SELECT * FROM foo; 
SELECT * FROM foo; 

在事務之外,如果有人在此期間更改了表,結果將會不同。然而,在一個事務中,兩者產生相同的結果 - 事務開始時表的視圖。

+1

最後一條語句只對`SERIALIZABLE`事務隔離級別有效。 – Quassnoi 2010-12-23 13:46:28

1

還是我沒有得到什麼交易是在MySQL?

BEGIN TRANSACTION 

INSERT 
INTO mytable 
VALUES (1) 

INSERT 
INTO mytable 
VALUES (2) 

COMMIT 

由於這個結果,你要麼兩個值(1和2)表中,或讓沒有。

有沒有機會,一個值到那裏,另一個沒有。

0

下面是一些信息:

http://en.wikipedia.org/wiki/Database_transaction

基本上,(數據庫)交易是一種方法,組更新語句。如果某條語句出現問題,您可以「撤銷」(回滾)所有語句,以便數據庫中的信息保持「正確」。

一個簡單的例子是如果你將一個人及其地址插入到數據庫中。如果先插入地址,然後再插入人員,並且人員信息中存在錯誤,則不希望地址不在地址所在的人員的數據庫中。如果您使用了交易,則可以立即撤消所有操作。

我希望這有一定道理:)

0

在數據庫上執行插入或更新時,更新/插入會立即生效。當你有一個事務表時,更新/插入會排隊,直到你排隊完成所有需要執行的動作。此時你告訴MySQL在同一時間提交所有更改。現在的好處是,如果任何行動失敗,都不會產生影響。