##數據庫事務
###含義
通過一組邏輯操作單元(一組DML——sql語句),將數據從一種狀態切換到另外一種狀態
###特點
(ACID)
原子性:要麼都執行,要麼都回滾
一致性:保證數據的狀態操作前和操作後保持一致
隔離性:多個事務同時操作相同數據庫的同一個數據時,一個事務的執行不受另外一個事務的干擾
持久性:一個事務一旦提交,則數據將持久化到本地,除非其他事務對其進行修改
相關步驟:
1、開啓事務
2、編寫事務的一組邏輯操作單元(多條sql語句)
3、提交事務或回滾事務
###事務的分類:
隱式事務,沒有明顯的開啓和結束事務的標誌
比如
insert、update、delete語句本身就是一個事務
顯式事務,具有明顯的開啓和結束事務的標誌
1、開啓事務
取消自動提交事務的功能
2、編寫事務的一組邏輯操作單元(多條sql語句)
insert
update
delete
3、提交事務或回滾事務
###使用到的關鍵字
set autocommit=0;
start transaction;
commit;
rollback;
savepoint 斷點
commit to 斷點
rollback to 斷點
###事務的隔離級別:
事務併發問題如何發生?
當多個事務同時操作同一個數據庫的相同數據時
事務的併發問題有哪些?
髒讀:一個事務讀取到了另外一個事務未提交的數據
不可重複讀:同一個事務中,多次讀取到的數據不一致
幻讀:一個事務讀取數據時,另外一個事務進行更新,導致第一個事務讀取到了沒有更新的數據
如何避免事務的併發問題?
通過設置事務的隔離級別
1、READ UNCOMMITTED
2、READ COMMITTED 可以避免髒讀
3、REPEATABLE READ 可以避免髒讀、不可重複讀和一部分幻讀
4、SERIALIZABLE可以避免髒讀、不可重複讀和幻讀
設置隔離級別:
set session|global transaction isolation level 隔離級別名;
查看隔離級別:
select @@tx_isolation;