3分钟了解数据库事务
事務是由幾個讀取和修改數據的sql命令組成的,但是知道commit命令被執行之后,修改操作才被認為是正常的完成。顯式事務常以Begin tran語句開頭,以commit tran或者rollback tran語句結尾的。
事務具有acid屬性
原子性(atomicity):原子性指的是每個事務要不提交(commit)要不終止(rollback)。比如現實中的轉賬
一致性(consistency):一致性屬性確保事務不允許系統到達一個不準確的邏輯狀態-數據必須總是保持邏輯上的正確。及時在發生系統故障時,約束和規則也必須得到承兌。
隔離性(isolation):隔離性會將并發事務與其他未完成事務的更新操作分離開。隔離性主要是解決并發事務出現的 臟讀、不可重復讀、幻讀現象,根據自己的業務場景選擇對應的隔離級別;
持久性(durability):當事務提交以后,數據庫的持久性屬性就會確保事務的作用持續存在。
?事務總是全部支持這四種acid屬性的。但是可能會初選一些另外的行為,常叫做‘一致性問題’。他們僅僅可能存在的行為,而用戶對于隔離級別的選擇決定下列這些行為哪種是被允許的。
Case1
事務A,先執行,處于未提交的狀態
?
事務B,后執行
?
?如果事務B能夠讀取到(name為lisi)這條記錄,事務A就對事務B產生了影響,這個影響叫做“讀臟”,讀到了未提交事務操作的記錄。
Case2
事務A先執行
?
?
事務B,后執行,并且提交
?
事務A,在此執行相同的查詢,結果name:zhaosi
?
這次是已提交事務B對事務A產生的影響,這個影響叫做“不可重復讀”(重點為update),一個事務內相同的查詢,得到了不同的結果。
?Case3
事務A,先執行,1條結果:
?
事務B,后執行,并且提交;
?
事務A,在此查詢為兩條,莫名其妙多出了一條
?
這次是已提交事務B對事務A產生的影響,這個影響叫做“幻讀”。(重點在insert,delete)
為了解決多個事務并發會引發的問題,進行并發控制。數據庫提供了四種事務隔離級別供用戶選擇。
Read Uncommitted?讀未提交
Read Committed?讀已提交
Repeatable Read?可重復讀
Serializable?串行化
?
總結
以上是生活随笔為你收集整理的3分钟了解数据库事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zend创始人离职原来早已安排好
- 下一篇: 为什么我不喜欢数据库三范式