資料庫知識點

2022-02-17 23:53:25 字數 4094 閱讀 8245

1.eca (event-condition-action)

事件觸發規則 trigger [行級或語句級; 幾個事件的組合; 觸發條件為真]

2.acid

①atomicity requirement 原子性要求

簡單地說就是:要麼同時拒絕,要麼同時成功。

還是舉個實在一點的例子:

(小菜剛寫了轉賬系統,想在想試試)

小菜:既然你教給我這麼多設計模式,還是要給些錢吧。我有個賬戶8888*********8888,大鳥你的賬戶是啥?我給你轉錢

大鳥:那就轉這個賬戶吧 6666*********6666,

(在轉賬操作中的小菜)

小菜:完了,停電了。我剛轉出去,你等會上去看看有沒有轉到。

(過了一分鐘)

大鳥:沒有呀。

小菜:玩完了。

根據這個例子抽象出來原子性:乙個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。

②consistency requirement 一致性需求

一致性,即在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。(完整性規則、參照完整性規則、自定義完整性規則[check約束或者trigger觸發器])

③isolation requirement 隔離性要求

舉個常見的例子

在windows中,如果多個程序對同乙個檔案進行修改是不允許的,windows通過這種方式來保證不同程序的隔離性:

而sql server中,通過sql server對資料庫檔案進行管理,從而可以讓多個程序可以同時訪問資料庫,為此sql server為了解決執行緒之間的衝突,設定了鎖協議。

④durability requirement 永續性要求

永續性是指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來的其他操作和資料庫故障不應該對其有任何影響。即一旦乙個事務提交,dbms(database management system)保證它對資料庫中資料的改變應該是永久性的,永續性通過資料庫備份和恢復來保證。

意味著在事務完成之後,該事務對資料庫所做的更改便持久的儲存在資料庫之中,並不會被回滾。

資料庫實現永續性的原理:sql server 通過 write-ahead-transaction-log 來保證資料的永續性。write-ahead-transaction-log的意思是:事務中對資料庫的改變在寫入資料庫之前,首先寫入到事務日誌中。而事務日誌是按照順序號進行排序的(lsn),當資料庫崩潰或者伺服器斷電時,重新啟動sql server,sql server 首先會檢查日誌順序號,將本應對資料庫做更改而未做的部分持久化到資料庫中,從而保證了永續性。

⑤sql server通過利用加鎖和阻塞來保證事物之間不同等級的隔離性

事務之間的互相影響可分為:髒讀(dirty read)、不可重複讀(no-repeated read)、幻讀(phantom read)

1.髒讀:

乙個事務讀取到了另乙個事務未提交的資料,而這個資料有可能是在之後會被回滾的。

舉個例子:

甲將a賬戶的錢轉到b賬戶,同時乙在此時對b賬戶餘額進行查詢。甲乙

從a賬戶取出$1000

轉給b賬戶

讀取餘額,發現甲已經向自己轉賬

甲發現轉的金額有錯,

便執行了回滾,取消了

之前的操作

2.不可重複讀:

在資料庫訪問中,乙個事務範圍內的兩個相同查詢卻返回了不同資料,這是由於查詢時系統中其他事務修改的提交而引起的。

舉個例子:

甲和乙同時對a賬戶進行操作。甲乙

讀取賬戶餘額

讀取賬戶餘額

存入$1000

讀取賬戶餘額

前後兩次乙的讀取操作得到的賬戶餘額不相同,只就叫做不可重複讀。(因為乙重複讀了賬戶餘額,發現了不同,可能是這樣才叫做不可重複讀吧)

3.幻讀(phantom read)

指事務不是獨立執行時發生的一種現象,例如第乙個事務刪除某一行全部資料,第二個事務新增了一行新資料,好像沒有修改一樣,出現了幻讀。

⑥理解sql server中的隔離等級

為了避免幾個事務之間的影響,sql server通過設定不同的隔離等級來進行不同的避免,因為高的隔離等級意味著更多的鎖,從而犧牲效能。

sql server提供了5中隔離,隔離等級由低到高分別為:

read uncommited(最高效能,但可能出現髒讀,不可重複讀,幻讀)

read commited (符合99%實際需求,可能出現不可重複讀,幻讀)

repeatable read(可能出現幻讀)

serializable (最低效能,range鎖會導致併發下降)

snopshot(sql server中不涉及到的,並不常用)

⑦好的排程:

1.acid的可序列化

2.可恢復的排程

3.無級聯的回滾

⑧併發控制:增加合理的等待

1.locking:為事務加上鎖,

鎖的協議,什麼時候加,什麼時候釋放,遇到鎖什麼反應

2.time-stamping

3.optimistic 積極考慮

假設施加在資料庫上的操作大多數並不衝突

⑨shared locks共享鎖 and exclusive locks排它鎖

兩種鎖之間的存在矩陣:sx

syesnox

nono

⑩鎖協議:兩段鎖協議 two-phase-locking

1.鎖定階段(growing phase):把所有要鎖定的資料全部加鎖,

2.釋放階段(shrinking):當開始釋放鎖時,不能再加上其他的鎖,只能不斷將之前加上的鎖解開。

嚴格的兩段鎖協議 strict 2pl

1.所有的事務,其所擁有的全部鎖只能在所有事務執行完時,才能進行釋放(commit/rollback操作之後)

2.其餘要求和兩段鎖協議要求相同

資料庫知識點

1.truncate delete和drop delete delete是一行行刪除資料,不影響表結構,並且會記錄日誌,可以進行回滾。truncate 刪除表中所有資料,不記錄日誌,不可以回滾,truncate之後表空間和索引大小會回到初始值。所以truncate之前最好備份 drop 刪除整個表結...

資料庫知識點

資料庫的事務,是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成為事務,必須滿足所謂的acid 原子性 ...

資料庫知識點

oracle 安裝oracle時需要的所需的軟體包安裝命令 yum install binutils compat libcap1 gcc glibc ksh libaio libgcc libstdc libxi libxtst make sysstat 1 建使用者create user ora...