您好,登錄后才能下訂單哦!
我們先來說說什么是事務:
事務就是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功,要不全都失敗。一個事務是一個連續的一組數據庫操作,就好像它是一個單一的工作單元進行。換言之,永遠不會是完整的事務,除非該組內的每個單獨的操作是成功的。如果在事務的任何操作失敗,則整個事務將失敗。
mysql的事務支持不是綁定在mysql服務器本身,而是與存儲引擎相關。例如,MyISAM:不支持事務,用于只讀程序提高性能;InnoDB:支持ACID事務,行級所,并發;Berkeley DB:支持事務。
事務的特性(ACID):
1.原子性(Atomicity):確保工作單元內的所有操作都成功完成,否則事務將被終止在故障點,和以前的操作將回滾到以前的狀態。簡單的說就是,一組事務,要么成功,要么撤回;
2.一致性(Consistency):確保數據庫正確地改變狀態后,成功提交的事務。
3.隔離性(Isolation):使事務彼此的操作的獨立和透明,即事務獨立運行,一個事務處理后的結果,影響了其他事務,那么其他事務會撤回。事務的100%隔離,需要犧牲速度。
4.持久性(Durability):確保提交事務的結果或效果的系統出現故障的情況下讓然存在。
mysql的事務處理主要有兩種方式:
1.用begin,rollback,commit來實現
begin:開始一個事務
rollback:事務回滾
commit:事務確認
2.直接用set來改變mysql的自動提交模式
mysql默認是自動提交的,也就是你提交一個query,它就直接執行,我們可以通過下面的語句進行設置:
set autocommit = 0 禁止自動提交
set autocommit = 1 開啟自動提交
我們要注意當我們用set autocommit = 0 的時候,你以后所有的sql都將作為事務處理,直到我們用commit確認或rollback結束。當我們結束這個事務的同時也開啟了個新的事務。按第一種方法只將當前的作為一個事務。mysql中只有INNODE和BDB類型的數據表才能支持事務處理,其他的類型是不支持的。
在mysql中,事務開始使用COMMIT或ROLLBACK語句開始工作和結束。開始和結束語句的sql命令之間形成了大量的事務。
COMMIT&&ROLLBACK:
這兩個關鍵字用于提交和回滾,主要用于mysql的事務。當一個成功的事務完成后,發出COMMIT命令應使所有參與表的更改才會生效。如果發生故障,應發出一個ROLLBACK命令,使返回的事務中引用的每一個表回到以前的狀態。
使用mysql的過程:
(1)在執行sql語句之前我們要開啟事務 start transaction
(2)正常執行我們的sql語句
(3)當sql語句執行完畢,存在兩種情況:
a.全都成功,我們要將sql語句對數據庫造成的影響提交到數據庫中,commit
b.某些sql語句失敗,我們執行rollback(回滾),將對數據庫的操作趕緊撤銷
接下來我們來看一個實例:(關于銀行存取錢的)
create table bank(name varchar(20),money decimal(5,1))engine=innodb default charset = utf8
insert into bank values(‘shaotuo’,1000),(‘laohu’,5000)
select * from bank
沒有成功的話執行回滾rollback
start transaction;//開啟事務
update bank set money=money+500 where name = ‘shaotuo’//修改數據
update bank set moey=money-500 where name = ‘laohu’
ERROR 1054(42522):Unknown column ‘moey’in ‘filed list’
由于上述有一個錯誤,我們要執行回滾rollback操作:
rollback;
select * from bank;
我們可以看到表沒有變化
成功之后進行commit操作:
start transaction;
update bank set money=money+500 where name = ‘shaotuo’
update bank set money=money-500 where name = ‘laohu’
兩個都執行成功后commit
commit;
select * from bank;
我們可以看到我們修改數據成功了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。