今日内容:1、事務
2、資料庫讀現象
3、資料庫鎖機制
一 事務
什麼是事務
事務就相當于一個盛放sql的容器
事務中的sql要麼全部執行成功,要麼所有已經修改的操作都混滾到原來的狀态,即一條sql也别想執行成功
為何要用事務
為了保證資料的安全、一緻性
事務有四大特性:
1、原子性(Atomicity)2、一緻性(Consistency)3、隔離性(Isolation)4、持久性(Durability):第7個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元,出現異常沒有拿到
except 異常:
rollback;
else:
commit;
事務的儲存點
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;
insert into employee values(19,"egonxxx",19);
savepoint three;
二 資料庫讀現象-》在并發場景下,資料不安全的一種展現
讀現象---》在并發場景下,并發的多個事務去操作同一份資料,而産生的一些奇怪的讀現象
在高并發情況下,即多個并發的事務同時操作一份資料,在沒有加鎖處理的情況下,會引發一些奇怪的讀現象
髒讀
不可重複讀
幻讀
三 鎖介紹
什麼是鎖:
鎖是一種保障資料的機制,如何保障?
為何要用鎖?
以互斥鎖為例,讓多個并發的任務同一時間隻有一個運作(注意這不是串行),犧牲了效率但換來資料安全
總鎖的優缺點:
優點: 保障并發場景下的資料安全
缺點:降低了效率
是以我們在使用鎖時應該盡可能縮小鎖的範圍,即鎖住的資料越少越好,并發能力越高
鎖的分類:
按照粒度:行級鎖、表級鎖、頁級鎖。
按照級别:共享鎖、排他鎖
按照使用方式分:樂觀鎖、悲觀鎖
鎖的使用:
事務一對id=3的行加了互斥鎖之後,其它事務對id=3行不能加任何鎖(寫不行,但是可以讀)
事務一對id=3的行加了共享鎖之後,其它事務對id=3行隻能加共享鎖,或者不加鎖(寫不行,但可以讀)
1
5----
7----
9
11
12