JS 如何實現網頁截圖這五種方法你知道嗎
MySQL 事務
什麼是事務
事務就是使用者定義的一系列資料庫操作,這些操作可以視為一個完成的邏輯處理工作單元,要麼全部執行,要麼全部不執行,是不可分割的工作單元。
事務的四大屬性(ACID)
原子性(Atomicity)
原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要完全應用到資料庫,如果操作失敗則不能對資料庫有任何影響
一致性(Consistency)
一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。
隔離性(Isolation)
隔離性是當多個使用者併發訪問資料庫時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作所幹擾,多個併發事務之間要相互隔離。
永續性(Durability)
永續性是指一個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。
事務的開啟與提交
對於一個MySQL資料庫(InnoDB),事務的開啟與提交模式有以下兩種:
-
引數 autocommit=0:手動提交事務
-
引數 autocommit=1(系統預設值):自動提交事務
檢視當前自動提交功能狀況:
show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set (0.06 sec)
臨時生效設定方法:
SET AUTOCOMMIT=1;
SET AUTOCOMMIT=0;
事務舉例:
-- 檢查事務狀態 show variables like 'autocommit'; -- 開始事務 start transaction ; set autocommit = 0; -- 設定為手動提交 insert into t_student values(NULL,'張三11',28,0,'13541220000','[email protected]'); insert into t_student values(NULL,'李四11',28,1,'12720343341','[email protected]'); COMMIT; -- 提交事務
資料庫併發性問題
資料庫併發性指的是多個事務可以同時訪問資料庫中的資料。而當多個事務在資料庫中併發執行時,資料的一致性可能受到破壞,從而導致資料出現問題。
事務的隔離級別
資料庫指定了 4 種事務的隔離級別,目的是為了解決資料庫訪問的併發性問題導致的資料的一致性被破壞
- Read uncommitted(未授權讀取、讀未提交)
- Read committed(授權讀取、讀提交)
- Repeatable read(可重複讀取) MySQL 預設隔離級別
- Serializable(序列化)
悲觀鎖
悲觀鎖就是某個事務在更新資料過程中將資料鎖定,其他任何事務都不能讀取或修改,必須修改完成後才能訪問資料(類似於 Java 的執行緒同步鎖機制)
select * from table_name where id=1 for update
- 使用方法:for update
- 特點:具有排他性(通常依賴於資料庫鎖機制),一般適合短事務處理
優點
可以保障資料庫的資料是絕對安全的,它是依賴資料庫的鎖機制,能很好的解決資料庫訪問的併發性問題
缺點
會導致資料庫訪問效能低下,所以適合短事務(事務執行時間很短)的情況
使用場景
對資料安全性要求非常高的場景,比如銀行系統、金融系統等
樂觀鎖
樂觀鎖並不是一種資料庫鎖機制,而是一種衝突檢測機制(版本衝突檢測機制和時間戳衝突檢測機制),它的特點就是併發性較好,事務修改資料時,其他事務仍可以修改資料
版本衝突檢測機制原理
即每個資料表中有一個版本欄位 version,某一個事務更新資料後版本號 +1,另一個事務更新後再 +1,當事務發現數據庫當前版本號與讀取資料時版本號不一致時,說明在讀取資料後該資料已被其他事務修改,則不能更新資料。
優點
可以保障併發性比較好(也就是資料庫訪問效能不錯),因為它是一種軟體的衝突檢測機制,並不依賴於資料庫的鎖機制
缺點
並沒徹底解決資料庫訪問的併發性問題,所以資料庫的資料不是絕對安全的
使用場景
對資料安全性要求不高而對效能要求很高的場景,比如各種資訊管理系統等