數據庫事務介紹及特性

數據庫事務介紹及特性mysql

1、數據庫事務介紹sql

簡單地說,事務就是邏輯上的一組SQL語句操做,組成這組操做的各個SQL語句,執行時要麼所有成功,要麼所有失敗。數據庫

 

例如:oldboy給oldgirl轉帳5元錢,流程以下:併發

1. oldboy銀行卡取出5元,計算式money-5。oracle

2. 5元錢打入oldgirl的帳戶上,oldgirl帳戶收到5元,計算式money+5。spa

 

上述轉帳的過程,對應的sql語句爲:事務

mysql> update oldboy_account set money=money-5 where name='oldboy';ci

mysql> update oldboy_account set money=money+5 where name='oldgirl';it

 

上述的兩條SQl操做,在事務中的操做就是要麼執行,要麼都不執行。io

這就是事務的原子性(Atomicity)。

MySQL5.5支持事務的引擎:InnoDB/ndb(mysql集羣默認引擎)。

 

2、事務的四大特性

一、原子性(Atomicity)

事務是一個不可分割的單位,事務中的全部SQL操做要麼都發生,要麼都不發生。

 

二、一致性(Consistency)

事務發生前和發生後,數據的完整性必須保持一致。

 

三、隔離性(Isolation)

當併發訪問數據庫時,一個正在執行的事務在執行完畢前,對於其它的會話是不可見的,多個併發的事務之間的數據是不可見的。

 

四、持久性(Durability)

一個事務一旦被提交,它對數據庫中的數據改變是永久性的。若是出了錯誤,事務也不容許撤銷,只能經過」補償性事務」。

 

小結:數據庫的四大特性對於全部關係型數據庫都是適用的。

 

3、事務的開啓

數據庫默認事務是自動提交的,也就是發一條sql它就執行一條。若是想多條sql放在一個事務中執行,則須要使用事務進行處理。當咱們開啓一個事務,而且沒有提交,mysql會自動回滾事務。或者咱們使用rollback命令手動執行回滾事務。

 

MysQL5.6版本

一、查看當前數據庫自動提交的狀態,默認爲ON

mysql> show variables like "%autocommit%" ;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit    | ON    |

+---------------+-------+

1 row in set (0.00 sec)

小結:mysql默認是自動提交的,oracle須要手動提交。

 

二、設置自動提交的狀態爲OFF

mysql> set global autocommit=off;

Query OK, 0 rows affected (0.00 sec)

 

mysql> show variables like "%autocommit%" ;

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit    | OFF   |

+---------------+-------+

1 row in set (0.00 sec)

小結:

一、建立一個表,若是自動提交的狀態爲OFF,就須要commit手動提交。

 

三、回滾事務

mysql> rollback;

Query OK, 0 rows affected (0.00 sec)