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...