在資料庫中,事務是指一組邏輯操作
,無論成或敗,都作為乙個整體進行工作,要麼全部執行,要麼全部不執行。
①原子性:事務是不可分割的最小工作單元,事務內的操作要麼全做,要麼全不做。
②一致性:事務必須使資料庫從乙個一致性狀態變成另外乙個一致性狀態。事務開始和完成,資料必須保持一致。(資料不被破壞)【'資料守恆'】
③隔離性:當多個事務處於併發訪問同乙個資料庫資源時,事務之間相互影響程度,不同的隔離級別決定了各個事務對資料資源訪問的不同行為。
④永續性:事務一旦提交後,資料是永久性的、不可回滾。(資料的修改是永久的)。
★ 跟j**a中的執行緒問題---併發問題差不多,都是針對同一資源,同時訪問/修改出現的問題。
★ 例子:兩個客戶端同時對同乙個銀行賬號進行操作,乙個客戶端進行訪問,乙個客戶端進行取錢】
(1)第一類丟失更新:
(2)第二類丟失更新:
(3)髒讀:
(4)幻讀:
(5)不可重複讀:
❀ 每乙個事務是有自己的空間的概念
1、 mysql中的4種隔離級別(重點看是否髒讀、不可重複讀、幻讀即可):
■ oracle 支援 read commited(預設)和 serializable。
■ mysql 支援 四種隔離級別,預設為 repeatable read
隔離級別
髒讀不可重複讀
幻讀oracle---讀已提交(只是避免了髒讀)否是
是mysql---可重複讀取(避免了髒讀和不可重複讀)否否
是隔離級別越高,資料庫事務併發執行效能越差,能處理的操作越少。
因此在實際專案開發中為了考慮併發效能一般使用 read commited,它能避免丟失更新和髒讀,儘管不能避免不可重複讀和幻讀,
不過更多的情況下使用悲觀鎖或樂觀鎖來解決。
✿ 隔離級別在一定程度解決了事務併發問題,不過一般解決事務併發,咱會採取悲觀鎖/樂觀鎖。
(1)悲觀鎖:使用資料庫自身的排它鎖機制 [★原理:資料庫自身的鎖機制(寫鎖)]
■ 使用客戶端工具n**icat模擬(開啟兩個命令列視窗,可以拖動出來方便檢視)併發:
■ 查詢事務加上了 for update,其中乙個事務處於阻塞狀態,等著另乙個事務的提交或回滾。
(1) ★原理:在表中額外新增乙個列,用來表示修改的版本(整型型別),修改一次就把版本增加1
.
(2)樂觀鎖的操作步驟:
mysql必知必會 mysql必知必會(四)
十四 理解子查詢 1 通過子查詢過濾 這本書在所有的章節都關連到了資料庫表,訂單資料是儲存在兩個表中,orders表儲存著 訂單號碼 顧客id和訂單日期。個人的訂單列表關連著orderitems表,訂單表沒有儲存顧客資訊,它只是儲存著顧客id,這實際的顧客資訊是儲存在customers表中。現在假設...
mysql的必知必會 mysql 必知必會 筆記
好久沒有寫了。1 show columns from table 等同於describe table顯示的是表的結構。而select from table 則顯示的是整個表中插入的資料。2 select distinct c1,c2 from table除非列不相同,否則所有行將被檢索出來,即不能對...
C 必知必會
條款2 多型 2 條款3 設計模式 5 條款4 stl 8 條款5 引用是別名而非指標 10 條款6 陣列形參 13 條款7 常量指標與指向常量的指標 16 條款8 指向指標的指標 19 條款9 新式轉型操作符 21 條款10 常量成員函式的含義 25 條款11 編譯器會在類中放東西 29 條款12...