更新時間: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;
讓張三少50塊,李四多50塊
update info set money=money-50 where id=1; update info set money=money+50 where id=2;
查詢sql執(zhí)行的結(jié)果
重新打開一個mysql客戶端查看數(shù)據(jù);
數(shù)據(jù)并未發(fā)生變化
提交事務:commit
另一個客戶端中的數(shù)據(jù)
例題:讓張三給李四轉(zhuǎn)50塊失敗
另一個客戶端的數(shù)據(jù):
最后執(zhí)行回滾,轉(zhuǎn)賬失敗
總結(jié):事務保持數(shù)據(jù)的完整性,具有原子性。
猜你喜