MYSQL Innodb下,update的併發是否會產生髒資料?

時間 2021-06-03 17:51:31

1樓:李春

不會,這個其實就是關係型資料庫本身就需要解決的問題。

首先,他們同時被MySQL執行,你的意思其實就是他們是併發執行的,而併發執行的事務在關係型資料庫中是有專門的理論支援的-ACID,事務並行等理論,所有關係型資料庫實現,包括Oracle,MySQL都需要遵循這個原理。

簡單一點理解就是鎖的原理。這個時候第乙個update會持有id=1這行記錄的排它鎖,第二個update需要持有這個記錄的排它鎖的才能對他進行修改,正常的話,第二個update會阻塞,直到第乙個update提交成功,他才會獲得這個鎖,從而對資料進行修改。

也就是說,按照關係型資料庫的理論,這兩個update都成功的話,id=1的number一定會被修改成22。如果不是22,那就是資料庫實現的乙個嚴重的bug。

如果想要深入了解,可能你要預讀一下資料庫與事務處理 (豆瓣)了。

粗淺一點的,可以先看一下如果有人問你資料庫的原理,叫他看這篇文章和英文原文How does a relational database work

請問 Mysql Innodb 的 RR 模式下哪種情況下需要手動加鎖啊?

陳廣勝 你說的對,大多數情形下,RR不需要加鎖,就可以產生序列化的排程。也有一些少數情形下例外。比如我在另乙個回答裡舉的例子,關於mysql的InnoDB多版本併發控制 MVCC 與事務隔離級別的疑問?還有乙個異常是併發寫產生的更新丟失。MySQL支援Write Committed,可以更新在事務執...

到底什麼情況下mysql innodb會發生回表操作

零五 MySQL innodb的主鍵索引是簇集索引,也就是索引的葉子節點存的是整個單條記錄的所有字段值,不是主鍵索引的就是非簇集索引,非簇集索引的葉子節點存的是主鍵欄位的值。回表是什麼意思?就是你執行一條sql語句,需要從兩個b 索引中去取資料。舉個例子 表tbl有a,b,c三個字段,其中a是主鍵,...

大部分情況下,MySQL Innodb中主鍵的效能是不是被浪費了?

Learner 上面很多人回答,提到了自增主鍵可以提高插入效率,能提高多少呢?看下innodb page 結構,不難發現,其實,無論你用什麼主鍵,record都是順序寫入page 的,page 尾部有個索引,這個才會產生資料遷移,並且這個索引是優化設計的,儘量減少了資料遷移,這個索引真的很小,影響沒...