1.資料庫事務處理程序
1.開啟事務(默認開啟)
手動開啟:兩種方式:第一種:begin;
第二種:start transaction;
2.執行sql陳述句
insert delete update select
3.事務的處理
提交(commit)(默認)/回滾(rollback)/保存還原點
autocommit變數表示自動提交的當前狀態
默認:autocommit = ON
想要查看autocommit狀態,利用show variables like ‘autocommit’;
設定自動提交狀態關閉:set sutocommit = OFF;
2.事務的四大特性(ACID)
A:Atomicity---->原子性
一個事務中的所有操作是一個整體,不可再分
事務中的所有操作要么都成功,要么都失敗
C:Consistency—>一致性
一個用戶操作了資料,提交以后
另一個用戶看到的資料與之前用戶看到的效果是一致
*I:Isolation---->隔離性----->(事務隔離級別)
指的是多個用戶并發訪問資料庫時
一個用戶操作資料庫,另一個用戶不能有所干擾
多個用戶之間的資料事務操作要互相隔離
D:Durability—>持久性
指的是一個用戶操作資料的事務一旦被提交(快取–>檔案)
他對資料庫底層真實的改變是永久性的 不可回傳
3.事務的隔離級別
事務的隔離性可能會產生多執行緒并發操作同一個資料庫表格的問題
會帶來資料的安全隱患
1.臟讀
一個人讀到了另外一個人還沒有提交的資料
A B在操作同一張表格
A修改了資料,還沒有提交,B讀取到了
A不提交了,回滾回來,B剛剛讀取到的那些資料就是無用的----臟資料
2.不可重復讀
A B在操作同一個表格
A先讀取了一些資料,讀完之后B此時將資料做了修改/洗掉
A再按照之前的條件重新讀一遍,與第一次讀取的不一致
3.幻讀(虛讀)
A B在操作同一個表格
A先讀取了一些資料,讀完之后B此時將資料做了新增
A再按照之前的條件重新讀一遍,與第一次讀取的不一致
需要考慮事務的隔離級別
Serializable 最高 可以避免所有出現的問題 性能很慢
Repeatable Read 可重復讀 (避免臟讀,不可重復讀)
Read Committed 讀已提交 (避免臟讀)
Read UnCommitted 讀取未提交 (所有效果均無法保證)
MySQL資料庫提供默認隔離級別 Repeatable Read
Oracle資料庫提供默認隔離級別 Read Committed
可以修改資料庫中的隔離級別
set session transaction isolation level xxx;
如果不放心可以查看
select @@tx_isolation;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/189788.html
標籤:其他
