文章目錄
一、資料庫的三正規化
第一正規化:強調的是原子性,即資料庫表的每一列都是不可分割的原子資料項
第二正規化:要求實體的屬性完全依賴於主關鍵字。
第三正規化:任何非主屬性不依賴於其它非主屬性。
二、一張自增表裡面總共有 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...