今日內(nèi)容:
1、事務(wù)
2趴梢、數(shù)據(jù)庫讀現(xiàn)象
3捎废、數(shù)據(jù)庫鎖機(jī)制
一 事務(wù)
什么是事務(wù)
事務(wù)就相當(dāng)于一個(gè)盛放sql的容器
事務(wù)中的sql要么全部執(zhí)行成功,要么所有已經(jīng)修改的操作都混滾到原來的狀態(tài)程储,即一條sql也別想執(zhí)行成功
為何要用事務(wù)
為了保證數(shù)據(jù)的安全、一致性
事務(wù)有四大特性:
# 1、原子性(Atomicity)
# 2章鲤、一致性(Consistency)
# 3致板、隔離性(Isolation)
# 4、持久性(Durability):第7個(gè)commit成功之后咏窿,就無法回滾了
try:
begin;
update user set balance=900 where name='wsb'; #買支付100元
update user set balance=1010 where name='egon'; #中介拿走10元
uppdate user set balance=1090 where name='ysb'; #賣家拿到90元,出現(xiàn)異常沒有拿到
except 異常:
rollback;
else:
commit;
事務(wù)的保存點(diǎn)
begin;
update employee set name="EGON_NB" where id=1;
update employee set name="ALEX_SB" where id=2;
update employee set name="WXX" where id=3;
savepoint one;
select * from employee;
update employee set name="yxx_sb" where id=4;
update employee set name="lxx" where id=5;
savepoint two;
select * from employee;
insert into employee values(19,"egonxxx",19);
savepoint three;
二 數(shù)據(jù)庫讀現(xiàn)象-》在并發(fā)場(chǎng)景下斟或,數(shù)據(jù)不安全的一種體現(xiàn)
讀現(xiàn)象---》在并發(fā)場(chǎng)景下,并發(fā)的多個(gè)事務(wù)去操作同一份數(shù)據(jù)集嵌,而產(chǎn)生的一些奇怪的讀現(xiàn)象
在高并發(fā)情況下萝挤,即多個(gè)并發(fā)的事務(wù)同時(shí)操作一份數(shù)據(jù),在沒有加鎖處理的情況下根欧,會(huì)引發(fā)一些奇怪的讀現(xiàn)象
臟讀
不可重復(fù)讀
幻讀
三 鎖介紹
什么是鎖:
鎖是一種保障數(shù)據(jù)的機(jī)制怜珍,如何保障?
為何要用鎖凤粗?
以互斥鎖為例,讓多個(gè)并發(fā)的任務(wù)同一時(shí)間只有一個(gè)運(yùn)行(注意這不是串行)酥泛,犧牲了效率但換來數(shù)據(jù)安全
總鎖的優(yōu)缺點(diǎn):
優(yōu)點(diǎn): 保障并發(fā)場(chǎng)景下的數(shù)據(jù)安全
缺點(diǎn):降低了效率
所以我們?cè)谑褂面i時(shí)應(yīng)該盡可能縮小鎖的范圍,即鎖住的數(shù)據(jù)越少越好嫌拣,并發(fā)能力越高
鎖的分類:
按照粒度:行級(jí)鎖柔袁、表級(jí)鎖、頁級(jí)鎖异逐。
按照級(jí)別:共享鎖捶索、排他鎖
按照使用方式分:樂觀鎖、悲觀鎖
鎖的使用:
事務(wù)一對(duì)id=3的行加了互斥鎖之后灰瞻,其它事務(wù)對(duì)id=3行不能加任何鎖(寫不行腥例,但是可以讀)
事務(wù)一對(duì)id=3的行加了共享鎖之后,其它事務(wù)對(duì)id=3行只能加共享鎖酝润,或者不加鎖(寫不行燎竖,但可以讀)
1
5----
7----
9
11
12