併發資料庫事務缺鎖導致的資料不一致情況:丟失更新,髒讀,不可重複讀,幻讀:
資料庫隔離級別:
詳解 mysql innodb 中意向鎖的作用:
redo和undo:redo與binlog的區別?binlog用於主從複製用,它記錄了資料庫的所有操作;而redo與undo只是保證server crash後沒有回刷硬碟的資料完整性,當資料sync回硬碟後,redo可以被覆蓋掉。
mysql innodb的mvcc實現原理:
mysql兩段加鎖協議:
大總結(深入理解mysql四種隔離級別及底層實現原理(mvcc和鎖)):
索引:
innodb的mvcc如何解決不可重複讀和快照讀的幻讀,當前讀用next-key解決幻讀:
sql優化:
聯合索引: ;聯合索引在使用的情況下效率比單一索引高,a,b,c會根據左字首生成(abc),(ab),(a)索引
explain執行計畫:
exists與in效率分析:
mysql的in查詢是可以用到索引嗎:
or與in的效率比較:in會對in中的資料進行排序然後使用二分查詢,所以時間複雜度是logn而or是n
mysql中is null、is not null、!=不能用索引?胡扯!:
profiles可以檢視sql執行的io時間,cpu情況;加鎖時間等總結:分布式 2pc/3pc/tcc
老生常談——利用訊息佇列處理分布式事務:
兩段加鎖協議?根據兩段加鎖協議,在rc下s鎖select後會馬上釋放,但在mysql實現中遵循二段加鎖協議(2pl),rc下s鎖會在事務提交或回滾時釋放。
rc和rr隔離級別的差別?
rc下的mvcc會在每次select時生成快照,可以讀到最新的提交資料,但不能保證重複讀和消除幻讀;rr下的mvcc會在第一次select時生成快照,所以可以保證重複讀和消除幻讀。rc通過加x或s鎖可保證重複讀,但不能保證消除幻讀。rr下加x或s鎖可以保證消除幻讀,因為預設開啟gap鎖。
丟失更新問題?
第一類丟失更新是事務rollback導致的,現在資料庫保證無論在哪種隔離級別下都可以保證消除第一類丟失更新。
無論哪個隔離級別都不能解決第二類丟失更新(s隔離級別使用lock in share容易出現死鎖,例下面),資料庫並不解決第二類丟失更新,所以需要我們自己從業務上去保證,有如下兩種方法:
1、悲觀鎖:select…for update 在讀取時給記錄加鎖,在事務結束後再釋放鎖;
2、樂觀鎖:通過給記錄增加版本號,使用cas原理解決。
事務a:select * from ta where id = 1; update ta set name=1 where id=1;
事務b:select * from ta where id = 1; update ta set name=2 where id=1;
上面的情況在s隔離級別會出現死鎖,因為select加了共享鎖。
char和varchar效率
查詢效率varchar高於char(因為varchar占用空間少,減少io);插入修改效率char高於varchar,因為varchar是變長的。
int(3)與int(11),int[m]代表什麼?
m代表顯示的長度,當列設定為fullzeor時,前面會補0顯示
myi為什麼讀比inodb快(jd面試題??)
inodb要維護mvcc,inodb是聚簇索引要進行二段io
char和varchar的區別,其實在大資料下varchar的查詢效率是比char高的;插入char快
mysql資料庫知識點總結
mysql屬於關係型資料庫,關係型資料庫是指採用了關係模型來組織資料的資料庫,而關係模型就是指二維 模型,所以,關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。1.mysql資料庫中常用的概念有 1 高併發讀寫效能低 由於 的使用者併發性高,往往是每秒上萬次的讀寫請求,雖然mysql等關...
Sqlite資料庫及資料庫知識點總結
sqlite資料庫就是乙個dll檔案,將它引用到你的專案裡就可以了。不同的開發語言就不同的dll檔案,如果你是用.net開發的,就去搜尋system.data.sqlite.dll這個檔案。至於下哪個檔案,你自己看著辦吧。source code 源 因為sqlite是開源的。documentatio...
MySql資料庫知識點總結01
資料庫從大的方面可以分為兩大部分,分別為底層的儲存系統也就是檔案系統,和上層的程式例項組成,程式例項有儲存管理 快取管理 日誌管理 許可權管理 容災管理 sql解析 索引 鎖等 程式實 儲存管理 快取管理 日誌管理 許可權管理 容災管理 sql解析 索引 鎖等 儲存 檔案系統 mysql體系結構 m...