事務的目的:
(1) 為了保證的數據的安全.
比如:轉錢的場景,A轉給B 100, A-100,B+100有兩步操作,開啟事務后兩步驟都完成才會完整的寫入數據庫,否則執行回滾操作回到原始狀態。
(2) 涉及多張表的操作時候(比如表是有關聯的)
刪除這種有關聯的,如果某張表刪除數據出錯,那前面已經刪除的關聯表就沒數據了,下次刪除就又可能出現其它問題,所以通過事務可以解決這個問題,要么都刪除成功,要不都不動。
事務的介紹:
MySQL 事務主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!
在 MySQL 中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務。
事務處理可以用來維護數據庫的完整性,保證成批的 SQL 語句要么全部執行,要么全部不執行。
事務用來管理 insert,update,delete 語句。
一般來說,事務是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
4個條件介紹:
原子性:一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
一致性:在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。
隔離性:數據庫允許多個並發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務並發執行時由於交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、
可重復讀(repeatable read)和串行化(Serializable)。
持久性:事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。
# 摘得
mysql使用事務寫法:
# 默認mysql開啟了自動提交,在執行insert,update,delete語句時候每一條sql語句就是一個事務。
# 查看自動提交 show global variables like 'autocommit'; 關閉自動提交: set global autocommit=0; 開啟: set global autocommit=1;
操作:
# 開啟事務
begin;
或:
start transaction;
# 回滾
注:回滾后,事務結束
rollback;
# 提交
注:提交后,事務結束
commit;
注:在事務開啟后可執行任何其他操作,遇到commit;才會寫入至硬盤,遇到rollback會回滾到事務開啟的那個時候
排他鎖(行鎖)的使用:
https://www.cnblogs.com/zezhou/p/12827109.html