mysql 事務管理

2022-06-01 22:06:11 字數 1579 閱讀 2180

事務管理:邏輯上的一組操作,要麼同時完成,要麼同時失敗。

mysql>start transaction;//

宣告乙個事務的開始

//從a的賬戶向b的賬戶轉入100元

mysql>update

account

setmoney=money+100

where

name='a';//

步驟1,向a的賬戶存入100,

mysql>update

account

setmoney=money-100

where

name='b';//

步驟2,從b的賬戶減去100,

mysql>rollback;//回滾事務,前面已經執行完成的步驟將會全部失效,用於取消事務

(必須在commit語句執行之前才會有效,在事務執行過程中意外中斷會預設執行事務回滾語句)

mysql>commit;//提交事務,如果以上兩個步驟都成功,則將最終結果提交到資料庫並產生效果,

//否則只要以上兩個步驟任意乙個失敗則提交失敗,最終不會對資料庫產生影響,

事務的四大特性:(資料庫自帶的功能,除隔離性之外,都不需要我們自己維護)

1,原子性(atomicity):事務是一組不可分割的單位,要麼一起成功,要麼一起失敗;

2,一致性(consistency):事務前後的資料完整性應該保持一致,(滿足所有約束);

3,永續性(durabilty):事務一旦被提交,就能對資料庫資料永久改變,不會應為中途中斷而被影響;

4,隔離性(isolation):多個使用者同時操作事務,事務之間互不干擾;

四大隔離級別:(

1,髒讀是指,在資料庫不做任何隔離的情況下,事務1對資料進行修改後又進行了回滾(相當於事務1最終未對資料進行任何修改),

而事務2在事務1修改前、修改後和回滾後分別對資料進行了3次讀取,其中只有第二次讀取到了資料的變化。

2,不可重複讀是指,在資料庫只做了隔離1或者隔離2的情況下,事務1對資料進行了修改並最終做了提交,而事務2在事務1修改前後分別對資料進行了讀取,

而第一次讀取到的資料在後面是不會再次重複讀取到的。)

1,read uncommitted; 不做任何隔離(安全性最低,效能最高)

2,read committed;   只能防止髒讀

3,repeatable read;   可以防止髒讀,不可重複讀,但是不能防止虛讀(幻讀)/系統預設的級別/

4,serializable;    資料庫執行序列化,所有問題都不會產生,但是效能低

安全性越高,則效能越低,系統預設的隔離級別最好;

---修改資料庫的隔離級別---

settx_isolation='read-uncommitted';//當開啟該隔離級別時,事務管理將失效(出現髒讀現象)

settx_isolation='read-committed';

settx_isolation='repeatable-read';

settx_isolation='serializable';

---查詢資料庫當前的隔離級別---

select @@tx_isolation;

mysql事務管理

事務 由多個sql語句組成 這些sql作為乙個整體不可分割,如果其中一條sql不能執行,那麼整個單元會回滾,只有所有sql語句都成功執行才能說這個事務被成功的執行了 mysql的儲存引擎中innodb bdb支援事務 每個事務的處理都滿足acid屬性 1 原子性 事務被看成乙個不可分割的單元 2 一...

MySQL 事務管理

事務的4個特性 acid 事務管理的相關命令 start transaction 開始事務 sql語句1 sql語句2 commit 提交事務 rollback 回滾 流程示例 start transaction insert into tb user name,age values zhangsa...

mysql 事務管理(高階) 待續

請口述以下問題 什麼是事務到特性,具體說說你到理解 請舉乙個案例描述為什麼要用到事務 賬 事務的隔離級別 待續。a b a給b轉賬100 正常mysql流程 a賬戶b賬戶 a 100 b 100 可能情況 情況a賬戶b賬戶 第一種a 100 b 100 第二種a 100 b第三種 ab 100 第四...