關於事務的學習

2022-08-22 12:12:10 字數 1930 閱讀 3390

事務:事務指邏輯上的一組操作,組成這組操作的各個單元,要麼全部成功,要麼全部不成功。

a、mysql

引擎是支援事務的

b、mysql

預設自動提交事務。每條語句都處在單獨的事務中。

c、手動控制事務

開啟事務:start transaction | begin

提交事務:commit

回滾事務:rollback

原子性:指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。

一致性:事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態。轉賬前和轉賬後的總金額不變。

隔離性:事務的隔離性是多個使用者併發訪問資料庫時,資料庫為每乙個使用者開啟的事務,不能被其他事務的運算元據所干擾,多個併發事務之間要相互隔離。

永續性:指乙個事務一旦被提交,它對資料庫中資料的改變就是永久性的,接下來即使資料庫發生故障也不應該對其有任何影響。

贓讀:指乙個事務讀取了另乙個事務未提交的資料。

不可重複讀:在乙個事務內讀取表中的某一行資料,多次讀取結果不同。乙個事務讀取到了另乙個事務提交後的資料。(update)

虛讀(幻讀):是指在乙個事務內讀取到了別的事務插入的資料,導致前後讀取不一致。 (insert)

資料庫通過設定事務的隔離級別防止以上情況的發生:

* 1、

read uncommitted:

贓讀、不可重複讀、虛讀都有可能發生。

* 2、

read committed:

避免贓讀。不可重複讀、虛讀都有可能發生。(

oracle

預設的)

* 4、

repeatable read:

避免贓讀、不可重複讀。虛讀有可能發生。(

mysql

預設)* 8、

serializable:

避免贓讀、不可重複讀、虛讀。

級別越高,效能越低,資料越安全

mysql中:

檢視當前的事務隔離級別:select @@tx_isolation;

更改當前的事務隔離級別:set transaction isolation level 四個級別之一。

設定隔離級別必須在事務之前

練習:設定事務的隔離級別為 read uncommitted

時間執行緒1

執行緒2說明

t1begin;

t2select * from account where name='zs';

結果1000塊t3

begin;

t4update account set money=money+100 where name='zs';

t5select * from account where name='zs';

結果1100

塊讀到了另乙個執行緒未提交事務的資料。贓讀發生了

t6commit;

t7select * from account where name='zs';

結果1100

塊讀到了另乙個執行緒提交事務的update

資料。不可重複讀發生了

t8insert into account values(4,'zl',1000);

執行insert

語句插入資料,事務自動提交了

t9select * from account;

查到4條資料

讀到了另乙個執行緒自動提交事務的insert

語句資料。虛讀發生了

t10commit;

connection介面:

設定隔離級別:必須在開啟事務之前。

關於事務的知識

舉個栗子 小明和小剛 同時給小紅轉賬,在資料庫執行的時候,肯定是有乙個先後順序的。注意,這裡就有兩個 事務。它們是在乙個完成了轉賬之後 再進行下乙個轉賬,相互之間不會影響。隔離性需要重點說下,在稍後會具體介紹 首先講一下我們常用資料庫 我只用過mysql oracle 為我們提供的事務隔離級別 從低...

關於Spring 的事務

首先了解什麼事事務,和一些基本概念。什麼是事務 事務 transaction 是訪問並可能更新資料庫中各種資料項的乙個程式執行單元 unit 事務的四大特性 事務的特性 acid 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 事...

關於Mongodb的事務

關於事務 事務的隔離級別 未提交讀 髒讀資料 已提交讀 不可重複讀 幻讀 序列化 serializable解決 uncommitted read 解決 unrepeat read 解決 mongodb的部署方式 單機模式 乙個primary 在記憶體中 包含 乙個databuffer 乙個journ...