儲存引擎主要有: 1. myisam , 2. innodb(後面三種不了解) , 3. memory, 4. archive, 5. federated 。
1.myisam
2.innodb
innodb 底層儲存結構為b+樹, b樹的每個節點對應innodb的乙個page,page大小是固定的,其中非葉子節點只有鍵值,葉子節點包含完成資料。
如圖為乙個簡單的2層b+樹:
它的使用場景是:
1)經常更新的表,適合處理多重併發的更新請求;
2)支援事務;
3)可恢復(通過 bin-log 日誌等);
4)外來鍵約束。只有它支援外來鍵;
5)支援自動增加列屬性 auto_increment。
索引(index)是幫助 mysql 實現高效獲取資料的資料結構。索引的資料結構和具體儲存引擎的實現有關, 在mysql中使⽤較多的索引有hash索引,b+樹索引等,⽽我們經常使⽤的innodb儲存引擎的預設索引實現為:b+樹索引.
事務是資料庫操作的最小工作單元,是作為單個邏輯工作單元執行的一系列操作;這些操作作為乙個整體一起向系統提交,要麼都執行、要麼都不執行;事務是一組不可再分割的操作集合(工作邏輯單元);
然後事務必須有的四個屬性,簡稱acid屬性:
多事務併發可能會出現這些的情況:
講到如何處理 就得涉及到 mysql的四種隔離機制:
隔離級別與併發現象之間的關係:
事務隔離級別
髒讀不可重複讀
幻讀讀未提交
允許允許
允許讀已提交
禁止允許
允許可重複讀
禁止禁止
不一定順序讀(可序列化)
禁止禁止
禁止然後再根據不同的隔離級別給它上不同的鎖:
讀未提交(ru): 有行級的鎖,沒有間隙鎖。它與rc的區別是能夠查詢到未提交的資料。
讀已提交(rc):有行級的鎖,沒有間隙鎖,讀不到沒有提交的資料。
可重複讀(rr):有行級的鎖,也有間隙鎖,每次讀取的資料都是⼀一樣的,並且沒有幻讀的情況。
序列列化(s):有行級鎖,也有間隙鎖,讀表的時候,就已經上鎖了
null值會佔⽤更多的位元組,且會在程式中造成很多與預期不符的情況.
最後強烈安利這個:一千行 mysql 學習筆記(這裡面指令很全)
面試題 資料庫
今天面試,遇到資料庫方面的問題,由於好久沒接觸過,很多都忘記了,回來查了資料,整理一下 1 觸發器與儲存過程的區別 觸發器 是一種特殊型別的儲存過程,當使用下面的一種或多種資料修改操作在指定表中對資料進行修改時,觸發器會生效 update insert 或 delete。觸發器可以查詢其它表,而且可...
資料庫 面試題
正規化 第一正規化 1nf 所謂第一正規化 1nf 是指在關係模型中,所有的域都應該是原子性的,而不能是集合 陣列 記錄等非原子資料項。第二正規化 2nf 在1nf基礎上消除非主屬性對主碼的部分函式依賴。第三正規化 3nf 在2nf基礎上消除非主屬性對主碼的傳遞函式依賴。巴斯 科德正規化 bcnf ...
資料庫面試題
這個主要是給自己看的,答案都是網上搜的 乙個叫department的表,裡面只有乙個字段 name 一共有4條紀錄,分別是a,b,c,d,對應四個球對,現在四個球對進行比賽,用一條sql語句顯示所有可能的比賽組合 select a.name,b.name fromdepartment a,depar...