mysql成績變等級 MySQL事務隔離級別

2021-10-18 15:17:07 字數 1347 閱讀 5178

一、四種隔離級別

read uncommitted(讀取未提交內容)

在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的效能也不比其他級別好多少。讀取未提交的資料,也被稱之為髒讀(dirty read)。

read committed(讀取提交內容)--sql server , oracle預設級別

這是大多數資料庫系統的預設隔離級別。它滿足了隔離的簡單定義:乙個事務只能看見已經提交事務所做的改變。這種隔離級別

也支援所謂的不可重複讀(nonrepeatable

read),因為同一事務的其他例項在該例項處理其間可能會有新的commit,所以同一select可能返回不同結果。

repeatable read(可重讀)--mysql預設級別

它確保同一事務的多個例項在併發讀取資料時,會看到同樣的資料行。不過理論上,這會導致另乙個棘手的問題:幻讀

(phantom

read)。簡單的說,幻讀指當使用者讀取某一範圍的資料行時,另乙個事務又在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的「幻影」

行。innodb和falcon儲存引擎通過多版本併發控制(mvcc,multiversion concurrency

control)機制解決了該問題。

serializable(可序列化)

這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的資料行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。

在mysql中,實現了這四種隔離級別,分別有可能產生問題如下所示:

事務隔離級別

髒讀不可重複讀

幻讀讀未提交(read-uncommitted)是是

是不可重複讀(read-committed)否是

是可重複讀(repeatable-read)否否

是序列化(serializable)否否

否二、事務的併發問題

1、髒讀(drity read):事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料。

2、不可重複讀(non-repeatable read):事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果 不一致。

3、幻讀(phantom read):系統管理員a將資料庫中所有學生的成績從具體分數改為abcde等級,但是系統管理員b就在這個時候插入了一條具體分數的記錄,當系統管理員a改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

mysql 成績排序

編寫乙個 sql 查詢來實現分數排名。如果兩個分數相同,則兩個分數排名 rank 相同。請注意,平分後的下乙個名次應該是下乙個連續的整數值。換句話說,名次之間不應該有 間隔 id score 1 3.50 2 3.65 3 4.00 4 3.85 5 4.00 6 3.65 write your m...

Mysql 事務隔離等級

1.未提交讀 2.提交讀 rc 不可避免 幻讀 3.可重複讀 rr 讀的資料存在快照中 臨鍵鎖 意向 排他 來避免 幻讀 4.序列化 髒讀 rc的情況下,有資料修改,2次讀取的結果不一致 幻讀 rc 情況下,有新資料 插入,2次讀取結果不一致 a.為了解決幻讀問題,innodb引入了gap鎖。在事務...

學生成績等級

檔名稱 完成日期 2013年 11月1 日 版本號 v1.0 對任務及求解方法的描述部分 輸入描述 學生成績等級問題 問題描述 要求輸入學生成績,給出學生成績等級 程式輸出 成績等級 問題分析 演算法設計 我的程式 心得體會 其實看著難,自己做起來就不難了...