事務(wù)(Transaction)
是并發(fā)控制的基本單位。所謂的事務(wù),它是一個(gè)操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,它是一個(gè)不可分割的工作單位。例如,銀行轉(zhuǎn)賬工作:從一個(gè)賬號扣款并使另一個(gè)賬號增款,這兩個(gè)操作要么都執(zhí)行,要么都不執(zhí)行。所以,應(yīng)該把它們看成一個(gè)事務(wù)。事務(wù)是數(shù)據(jù)庫維護(hù)數(shù)據(jù)一致性的單位,在每個(gè)事務(wù)結(jié)束時(shí),都能保持?jǐn)?shù)據(jù)一致性。 針對上面的描述可以看出,事務(wù)的提出主要是為了解決并發(fā)情況下保持?jǐn)?shù)據(jù)一致性的問題。
事務(wù)具有以下4個(gè)基本特征。
● Atomic(原子性):事務(wù)中包含的操作被看做一個(gè)邏輯單元,這個(gè)邏單元中的操作要么全部成功,要么全部失敗。
● Consistency(一致性):只有合法的數(shù)據(jù)可以被寫入數(shù)據(jù)庫,否則事務(wù)應(yīng)該將其回滾到最初狀態(tài)。
● Isolation(隔離性):事務(wù)允許多個(gè)用戶對同一個(gè)數(shù)據(jù)進(jìn)行并發(fā)訪問,而不破壞數(shù)據(jù)的正確性和完整性。同時(shí),并行事務(wù)的修改必須與其他并行事務(wù)的修改相互獨(dú)立。
● Durability(持久性):事務(wù)結(jié)束后,事務(wù)處理的結(jié)果必須能夠得到固化。
2.事務(wù)的語句
- 開始事物:BEGIN TRANSACTION
- 提交事物:COMMIT TRANSACTION
- 回滾事務(wù):ROLLBACK TRANSACTION
3.事務(wù)的4個(gè)屬性
- ①原子性(Atomicity):事務(wù)中的所有元素作為一個(gè)整體提交或回滾,事務(wù)的個(gè)元素是不可分的,事務(wù)是一個(gè)完整操作。
- ②一致性(Consistemcy):事物完成時(shí),數(shù)據(jù)必須是一致的,也就是說,和事物開始之前,數(shù)據(jù)存儲中的數(shù)據(jù)處于一致狀態(tài)。保證數(shù)據(jù)的無損。
- ③隔離性(Isolation):對數(shù)據(jù)進(jìn)行修改的多個(gè)事務(wù)是彼此隔離的。這表明事務(wù)必須是獨(dú)立的,不應(yīng)該以任何方式以來于或影響其他事務(wù)。
- ④持久性(Durability):事務(wù)完成之后,它對于系統(tǒng)的影響是永久的,該修改即使出現(xiàn)系統(tǒng)故障也將一直保留,真實(shí)的修改了數(shù)據(jù)庫
4.事務(wù)的保存點(diǎn)
- SAVE TRANSACTION 保存點(diǎn)名稱 --自定義保存點(diǎn)的名稱和位置
- ROLLBACK TRANSACTION 保存點(diǎn)名稱 --回滾到自定義的保存點(diǎn)
// 開啟事務(wù)
[CATransaction begin];
// 設(shè)置動(dòng)畫時(shí)長
[CATransaction setAnimationDuration:0.5];
// 動(dòng)畫
// 可動(dòng)畫屬性
_layer.position = CGPointMake(arc4random_uniform(250), arc4random_uniform(500));
// 背景顏色
_layer.backgroundColor = [self randomColor].CGColor;
// 圓角半徑
_layer.cornerRadius = arc4random_uniform(50);
// 邊框 _layer.borderWidth = arc4random_uniform(10); _layer.borderColor = [self randomColor].CGColor;
// 提交事務(wù)
[CATransaction commit];```
要關(guān)閉隱式動(dòng)畫需要用到動(dòng)畫事務(wù)CATransaction,在事務(wù)內(nèi)將隱式動(dòng)畫關(guān)閉,例如上面的代碼可以改:
```// 事務(wù):
// 開啟事務(wù)
[CATransaction begin];
//禁用隱式動(dòng)畫
[CATransaction setDisableActions:YES];
// 設(shè)置動(dòng)畫時(shí)長
[CATransaction setAnimationDuration:0.5]; // 動(dòng)畫
// 可動(dòng)畫屬性
_layer.position = CGPointMake(arc4random_uniform(250), arc4random_uniform(500));
// 背景顏色
_layer.backgroundColor = [self randomColor].CGColor;
// 圓角半徑
_layer.cornerRadius = arc4random_uniform(50); // 邊框
_layer.borderWidth = arc4random_uniform(10); _layer.borderColor = [self randomColor].CGColor;
// 提交事務(wù)
[CATransaction commit];```