1. 事務概念引入:數據庫
現實生活中,咱們每每常常會進行轉帳操做,轉帳操做能夠分爲兩部分來完成,轉入和轉出。只有這兩部分都完成了才能夠認爲是轉帳成功。在數據庫中,這個過程是使用兩條語句來完成的,若是其中任意一條語句出現了異常沒有執行,則會致使兩個帳號的金額不一樣步,形成錯誤。併發
爲了防止上面可能出現的狀況,MySQL引入了事務,所謂事務就是針對數據庫的一組操做,它能夠由一條或者多條SQL語句組成,同一個事務的操做具有同步的特色,若是其中有一條語句不能執行的話,那麼全部的語句都不會執行,也就是說,事務中的語句要麼都執行,要麼都不執行。spa
在使用數據庫時候須要使用事務,必須先開啓事務,開啓事務的語句具體以下:code
start transaction;blog
即:事務
上面語句是用來開啓事務,事務開啓以後就能夠執行SQL語句,SQL語句執行成功以後,須要使用相應語句提交事務,提交事務的語句以下:ci
commit;rem
須要注意的是,在MySQL中直接書寫的SQL語句都是自動提交的,而事務中的操做語句須要使用commit語句手動提交,只有事務提交後其中的操做纔會生效。同步
若是不想提交事務,咱們還可使用相關語句取消事務(也稱回滾),具體語句以下:it
rollback;
須要注意的是,rollback語句只能針對未提交的事務執行的回滾操做,已經提交的事務是不能回滾的。
2. 事務操做具備嚴格的定義,它必須知足ACID:
ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
(1)原子性: 原子性是指事務是一個不可再分割的工做單位,事務中的操做要麼都發生,要麼都不發生。
(2)一致性:一致性是指在事務開始以前和事務結束之後,數據庫的完整性約束沒有被破壞。這是說數據庫事務不能破壞關係數據的完整性以及業務邏輯上的一致性。
(3)隔離性:隔離性是指併發的事務是相互隔離的。即一個事務內部的操做及正在操做的數據必須封鎖起來,不被企圖進行修改的事務看到 。
(4)持久性:持久性是指在事務完成之後,該事務所對數據庫所做的更改便持久的保存在數據庫之中,並不會被回滾。 即便出現了任何事故好比斷電等,事務一旦提交,則持久化保存在數據庫中。
3. 相信經過上面的講解,咱們對事務有了一個簡單的瞭解,接下來咱們經過一個轉帳的案例演示如何使用事務。
(1)演示以前準備工做:
具體SQL語句以下:
create database chapter06; use chapter06; create table account( id int primary key auto_increment, name varchar(40), money float ); insert into account(name,money) values('a',1000); insert into account(name,money) values('b',1000);
執行效果以下:
(2)接下來咱們使用事務來演示如何實現轉帳功能:
首先開啓一個事務,而後經過update語句將 a帳戶的100元 轉給 b 帳戶,而後最後提交事務,具體語句以下:
start transaction; update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; commit;
執行效果以下: