數據庫事務介紹及特性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) |