MySQL相關知識點整理

2021-10-06 00:23:54 字數 3460 閱讀 1145

文章目錄

一、資料庫的三正規化

第一正規化:強調的是原子性,即資料庫表的每一列都是不可分割的原子資料項

第二正規化:要求實體的屬性完全依賴於主關鍵字。

第三正規化:任何非主屬性不依賴於其它非主屬性。

二、一張自增表裡面總共有 7 條資料,刪除了最後 2 條資料,重啟 mysql 資料庫,又插入了一條資料,此時 id 是幾?

三、如何獲取當前資料庫版本

使用select version()獲取當前 mysql 資料庫版本。

四、事務的四大特性(acid) 是什麼?

五、併發事務帶來的問題

​ 在實際專案中,多個事務操作相同的資料來完成各自的任務,因為併發會造成以下問題:

注意:

不可重複讀和幻讀的區別:不可重複讀的重點是修改,幻讀的重點是新增或刪除

六、事務隔離等級,mysql的預設隔離等級

隔離級別

髒讀不可重複讀

幻影讀read-uncommitted√√

√read-committed×√

√repeatable-read××

√serializable××

×mysql可以通過以下命令查詢當前資料庫的隔離等級:

select @@transaction_isolation;
注意:

innodb儲存引擎的預設支援的隔離級別是repeatable-read(可重讀)已經可以完全保證事務的隔離性要求,即達到了 sql標準的serializable(可序列化)隔離級別。

​ 因為隔離級別越低,事務請求的鎖越少,所以大部分資料庫系統的隔離級別都是read-committed(讀取提交內容),但是你要知道的是innodb儲存引擎預設使用repeatable-read(可重讀)並不會有任何效能損失。

innodb儲存引擎在 分布式事務 的情況下一般會用到serializable(可序列化)隔離級別

七、索引相關

1> 索引是幹嘛用的?

​ 主要為了提高查詢效率。

2> 資料庫的索引有哪些?

​ 1、 聚集索引(主鍵索引):在資料庫裡,所以行數都會按照主鍵索引進行排序

​ 2、 非聚集索引:普通字段加上索引

​ 3、 聯合索引: 幾個字段聯合組成的索引

​ 主要解釋一下聯合索引:

-- 新增索引

alter table `student`

add unique index `idx_age_name_***`(`age`, `name`, `***`) using btree;

​ 聯合索引遵從最左字首原則

a:select * from student where age = 16 and name = '小張'

b:select * from student where name = '小張' and *** = '男'

c:select * from student where name = '小張' and *** = '男' and age = 18

d:select * from student where age > 20 and name = '小張'

e:select * from student where age != 15 and name = '小張'

f:select * from student where age = 15 and name != '小張'

​ a:遵從最左匹配原則,age在最左邊,所以a走索引;

​ b:直接從name開始,沒有遵從最左匹配原則,所以b不走索引;

​ c:雖然從name開始,但是檢索條件中存在有最左邊索引的age,mysql內部會自動轉成where age = 18 and *** = '男' and name = '小張',遵從了最左匹配原則,所以c走索引;

​ d:因為age > 20 是範圍,範圍欄位會結束索引對範圍後面索引欄位的使用,所以只對age 走索引;

​ e:因為 != 不走索引,所以e不走索引;

​ f:只有age 走索引,原因同上;

3> 哪些不走索引?

-- 新增索引

alter table `student`

add unique index `idx_age`(`age`) using btree,

add unique index `idx_name`(`name`) using btree;

​ 1、like這種就是%在前面的走索引,在後面的不走索引

a:select * from student where 'name' like '王%'		-- 不走索引

b:select * from student where 'name' like '%小' -- 走索引

​ 2、用索引列進行計算的,不走索引

a:select * from student where age = 10+8			-- 走索引

b:select * from student where age + 8 = 18 -- 不走索引

​ 3、對索引列用函式的,不走索引

a:select * from student where  concat('name','哈') ='王哈哈';		-- 不走索引

b:select * from student where name = concat('王哈','哈'); -- 走索引

​ 4、索引列用了!=不走索引

select * from student where age != 18		-- 不走索引
4> 索引具體採用的哪種資料結構

​ mysql常用資料結構為hash索引b+樹索引

5> b+ tree索引和hash索引區別

6> mysql的索引實現方式​

1、myisam索引實現( b+tree )-非聚集索引

​ 主索引:主鍵唯一

​ 表要求:表可以沒有主鍵

2、innodb索引實現 ( b+tree ) -聚集索引

​ 主索引:主鍵唯一

​ 表要求:表必須有主鍵

MySQL知識點整理

樂觀鎖介紹 樂觀鎖 optimistic locking 相對悲觀鎖而言,樂觀鎖假設認為資料一般情況下不會造成衝突,所以在資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測,如果發現衝突了,則讓返回使用者錯誤的資訊,讓使用者決定如何去做。那麼我們如何實現樂觀鎖呢,一般來說有如下方式 使用資料版...

mysql知識點整理

為了備忘,就總結了一下 一 b樹和b 樹的區別 1.b樹根節點和葉子節點會存資料。2.而b 樹只有葉子節點會存資料,且所有葉子節點是鍊錶連線,獲取資料只需要直接從葉子節點的鍊錶中獲取,效率更高 二 樂觀鎖和悲觀鎖 1.樂觀鎖 樂觀鎖具體實現是由應用程式控制,通過比對版本號或者時間戳是否相同來判斷資料...

iframe高度相關知識點整理

iframe 元素也就是文件中的文件.contentwindow屬性是指指定的frame或者iframe所在的window物件.用iframe巢狀頁面是,如果父頁面要獲取子頁面裡面的內容,可以使用contentwindow或者contentdocument,其區別如下 a contentwindow...