事務、事務的四個特性
現實生活中,我們往往經常會進行轉賬操作,轉賬操作可以分為兩部分來完成,轉入和轉出。只有這兩部分都完成了才可以認為是轉賬成功。在資料庫中,這個過程是使用兩條語句來完成的,如果其中任意一條語句出現了異常沒有執行,則會導致兩個賬號的金額不同步,造成錯誤。
為了防止上面可能出現的情況,MySQL引入了事務,所謂事務就是針對資料庫的一組操作,它可以由一條或者多條SQL語句組成,同一個事務的操作具備同步的特點,如果其中有一條語句不能執行的話,那麼所有的語句都不會執行,也就是說,事務中的語句要麼都執行,要麼都不執行。
在使用資料庫時候需要使用事務,必須先開啟事務,開啟事務的語句具體如下:
start transaction;
即:
上面語句是用來開啟事務,事務開啟之後就可以執行SQL語句,SQL語句執行成功之後,需要使用相應語句提交事務,提交事務的語句如下:
commit;
需要注意的是,在MySQL中直接書寫的SQL語句都是自動提交的,而事務中的操作語句需要使用commit語句手動提交,只有事務提交後其中的操作才會生效。
如果不想提交事務,我們還可以使用相關語句取消事務(也稱回滾),具體語句如下:
rollback;
需要注意的是,rollback語句只能針對未提交的事務執行的回滾操作,已經提交的事務是不能回滾的。
2. 事務操作具有嚴格的定義,它必須滿足ACID:
ACID,指資料庫事務正確執行的四個基本要素的縮寫。包含:原子性(A
(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;
執行效果如下: