首頁技術(shù)文章正文

什么是mysql事務(wù)場(chǎng)景?

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

1、場(chǎng)景

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

場(chǎng)景: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、事務(wù)(transaction)的講解

什么是事務(wù)?

事務(wù)是應(yīng)用程序中一系列嚴(yán)密的操作,所有操作必須成功完成,否則在每個(gè)操作中所作的所有更改都會(huì)被撤消。


事務(wù)的優(yōu)點(diǎn)

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

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

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

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


使用事務(wù)的好處

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


事務(wù)的使用


語法

開啟事務(wù): start  transaction  或 begin [work]

sql語句的執(zhí)行

提交事務(wù)commit

回滾事務(wù):rollback;

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

例題

創(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塊

開啟事務(wù):start transaction;

 

1591157197668_mysql事務(wù).jpg


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

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


1591157206509_mysql事務(wù)02.jpg


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

 

1591157216749_mysql事務(wù)03.jpg


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

1591157230414_mysql事務(wù)04.jpg


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

提交事務(wù):commit

 

1591157239703_mysql事務(wù)05.jpg


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

 

1591157249447_mysql事務(wù)06.jpg


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


1591157260639_mysql事務(wù)07.jpg


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

1591157272217_mysql事務(wù)08.jpg


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

 

1591157288286_mysql事務(wù)09.jpg


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


1577370495235_學(xué)IT就到黑馬程序員.gif



猜你喜

服務(wù)器是什么?服務(wù)器空間又是什么?

DNS服務(wù)器是什么?DNS劫持又是什么?

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

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!