首頁技術文章正文

什么是mysql事務場景?

更新時間:2020-06-03 來源:黑馬程序員 瀏覽量:

1、場景

一組sql(增刪改)要么都執(zhí)行,要么都不執(zhí)行。

場景:A有10000元

B有10000元

A向B轉(zhuǎn)賬500,是兩條更新

update bill set 余額=余額-500 where A;

update bill set 余額=余額+500 where B;

這兩條數(shù)據(jù)必須要么都執(zhí)行,要么都不執(zhí)行,如果執(zhí)行了一半,發(fā)生問題,那么執(zhí)行過的sql要回滾。


2、事務(transaction)的講解

什么是事務?

事務是應用程序中一系列嚴密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。


事務的優(yōu)點

(1) A(atomicity) 原子性。事務里面的操作,要么全部成功執(zhí)行,要么全部失敗回滾,不可以只執(zhí)行其中的一部分。

(2) C(consistency) 一致性。一個事務的執(zhí)行不應該破壞數(shù)據(jù)庫的完整性約束。

(3)I(isolation) 隔離性。通常來說,事務之間的行為不應該互相影響。

(4)D(durability) 持久性。事務提交之后,需要將提交的事務持久化到磁盤。即使系統(tǒng)崩潰,提交的數(shù)據(jù)也不應該丟失。


使用事務的好處

在修改數(shù)據(jù)的操作中保持數(shù)據(jù)的完整性.


事務的使用


語法

開啟事務: start  transaction  或 begin [work]

sql語句的執(zhí)行

提交事務commit

回滾事務:rollback;

在事務開始和結(jié)束之間的這些sql,就在同一個事務中。

例題

創(chuàng)建表并且插入數(shù)據(jù)


創(chuàng)建表:

create table info(
    id int auto_increment primary key,
    name varchar(5),
    money decimal(10,2)
);
insert into info values(1,'張三',1000);
insert into info values(2,'李四',1000);



例題:讓張三給李四成功轉(zhuǎn)50塊

開啟事務:start transaction;

 

1591157197668_mysql事務.jpg


讓張三少50塊,李四多50塊

update info set money=money-50 where id=1;
update info set money=money+50 where id=2;


1591157206509_mysql事務02.jpg


查詢sql執(zhí)行的結(jié)果

 

1591157216749_mysql事務03.jpg


重新打開一個mysql客戶端查看數(shù)據(jù);

1591157230414_mysql事務04.jpg


數(shù)據(jù)并未發(fā)生變化

提交事務:commit

 

1591157239703_mysql事務05.jpg


另一個客戶端中的數(shù)據(jù)

 

1591157249447_mysql事務06.jpg


例題:讓張三給李四轉(zhuǎn)50塊失敗


1591157260639_mysql事務07.jpg


另一個客戶端的數(shù)據(jù):

1591157272217_mysql事務08.jpg


最后執(zhí)行回滾,轉(zhuǎn)賬失敗

 

1591157288286_mysql事務09.jpg


總結(jié):事務保持數(shù)據(jù)的完整性,具有原子性。


1577370495235_學IT就到黑馬程序員.gif



猜你喜

服務器是什么?服務器空間又是什么?

DNS服務器是什么?DNS劫持又是什么?

什么是域名?域名和URL有什區(qū)別?

分享到:
在線咨詢 我要報名
和我們在線交談!