天天看點

0基礎linux運維教程 課時複習

今日内容: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