劍指Offer 知識點儲備 資料庫基礎

2021-07-24 10:04:59 字數 3626 閱讀 5448

#劍指offer——知識點儲備-資料庫基礎

##資料庫

###事務

####事務的四個特性(acid):

原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)

在sql標準中定義了四種隔離性:(下面隔離性是由低到高,併發性由高到低)

隔離級別            髒讀  不可重複讀  幻讀

未提交讀(read uncommitted) 可能  可能     可能

已提交讀(read committed) 不可能  可能     可能

可重複讀(repeatable read) 不可能  不可能     可能

可序列化(serializable)   不可能  不可能    不可能

髒讀、不可重複讀和幻讀

###索引

####2.1 資料庫索引的優缺點以及什麼時候資料庫索引失效?

#####索引的特點

(1)可以加快資料庫的檢索速度;

(2)只能建立在表上,不能建立到檢視上;

(3)既可以直接建立又可以間接建立;

(4)可以在優化隱藏中使用索引;

(5)使用查詢處理器執行sql語句,在乙個表上,一次只能使用乙個索引。

#####索引的優點

(1)建立唯一性索引,保證資料庫表中每一行資料的唯一性;

(2)大大加快資料的檢索速度,這是建立索引的最主要原因;

(3)加速資料庫表之間的鏈結,特別是在實現資料庫的參考完整性方面特別有意義;

(4)在使用分組和排序子句進行檢索時,同樣可以顯著減少查詢中分組和排序的時間;

(5)通過使用索引,可以在查詢中使用優化隱藏器,提高系統的效能;

#####索引的缺點

(1)建立索引和維護索引要耗費時間,這種時間隨著數量的增加而增加;

(2)索引需要占用物理空間,除了資料表占用資料空間之外,每乙個索引還要占用一定的物理空間,如果建立聚集索引,那麼需要的空間就會更大;

(3)當對表中的資料進行增加、刪除和修改的時候,索引也需要維護,降低資料維護的速度;

#####索引分類

(1)普通索引(它沒有任何限制。)

(2)唯一性索引(索引列的值必須唯一,但允許有空值。)

(3)主鍵索引(一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主鍵索引。)

(4)組合索引

(5)聚集索引 按照每張表的主鍵構造一顆b+樹,並且葉節點中存放著整張表的行記錄資料,因此也讓聚集索引的葉節點成為資料頁。

(6)非聚集索引(輔助索引)(頁節點不存放一整行記錄)。

#####索引失效

(1)如果條件中有or,即使其中有條件帶索引,也不會使用(盡量少用or);

(2)like查詢是以%開頭,例如select * from mytable wheret name like』%admin』;

(3)如果列型別是字串,那一定要在條件中使用引號引起來,否則不會使用索引;

#####各引擎支援索引:(核心弄懂b-tree索引)

myisam,innodb,memonry三個常用mysql引擎型別比較

索引   myisam索引   innodb索引   memonry索引

b-tree索引  支援      支援      支援

hash索引   不支援     不支援     支援

r-tree索引  支援     不支援     不支援

full-text索引 不支援    暫不支援     不支援

####資料庫中的索引結構?什麼情況下適合建索引?

資料庫中的索引結構?

因為在使用二叉樹的時候,由於二叉樹的深度過大而造成i/o讀寫過於頻繁,進而導致查詢效率低下。因此採用多路樹結構,b樹的各種操作能使b樹保持較低的高度。

b樹又叫平衡多路查詢樹,一棵m階的b樹特性如下:

/**學生表*/

create table student (

stu_id int auto_increment,

name varchar(30),

age int ,

class varchar(50),

address varchar(100),

primary key(stu_id)

)/*學生課程表*/

create table course(

cour_id int auto_increment,

name varchar(50),

code varchar(30),

primary key(cour_id)

)/**學生課程關聯表*/

create table stu_cour(

sc_id int auto_increment,

stu_id int ,

cour_id int,

primary key(sc_id)

)

第二步:為stu_cour關聯表新增外來鍵

/*新增外來鍵約束*/

alter table stu_cour add constraint stu_fk1 foreign key(stu_id) references student(stu_id);

alter table stu_cour add constraint cour_fk2 foreign key(cour_id) references course(cour_id);

完成建立!

###sql優化

###no sql 資料庫

####常用的資料庫有哪些?redis用過麼?

常用的關聯式資料庫:

mysql、sqlserver、oracle

常用的無模式資料庫:

mongodb, merncached,redis……

redis

(1)redis是乙個速度非常快的非關聯式資料庫,可以儲存鍵(key)與5種不同型別的值(value)之間的對映,可以將儲存在記憶體中的鍵值對資料持久化到硬碟中。

(2)與merncached相比

1)兩者都可以用於儲存鍵值對映,彼此效能也相差無幾;

2)redis能夠自動以兩種不同的方式將資料寫入硬碟;

3)redis除了能儲存普通的字串鍵之外,還可以儲存其他4種資料結構,merncached只能儲存字串鍵;

4)redis既能作主資料庫,也可以作為其他儲存系統的輔助資料庫;

###資料庫引擎(儲存引擎)

引擎是什麼?

當你訪問資料庫時,不管是手工訪問,還是程式訪問,都不是直接讀寫資料庫檔案,而是通過資料庫引擎去訪問資料庫檔案。

以關係型資料庫為例,你發sql語句給資料庫引擎,資料庫引擎解釋sql語句,提取出你需要的資料返回給你。因此,對訪問者來說,資料庫引擎就是sql語句的直譯器。

myisam和innodb引擎的區別

主要區別:

###其他

資料庫中的正規化有哪些

目前關聯式資料庫有6種正規化:第一正規化,第二正規化,第三正規化,巴斯—科德正規化,第四正規化,第五正規化。滿足最低要求的正規化是第一正規化。在第一正規化的基礎上進一步滿足更多規範要求的稱為第二正規化,其餘正規化依次類推,一般來說,資料庫只需滿足第三正規化(3nf)就ok了。

正規化:

![這裡寫描述]( ![這裡寫描述]( ![這裡寫描述](

劍指offer知識點 C 之ListNode

單鏈表,弄清楚可stl中list的區別 listnode的結構 structlistnode 初始化當前結點值為x,指標為空 初始化支援 listnode int x 這種方式,即 把x賦給val,next 賦值null。如何向listnode中插入新的結點 從鍵盤輸入 listnode temp1...

資料庫知識點

1.truncate delete和drop delete delete是一行行刪除資料,不影響表結構,並且會記錄日誌,可以進行回滾。truncate 刪除表中所有資料,不記錄日誌,不可以回滾,truncate之後表空間和索引大小會回到初始值。所以truncate之前最好備份 drop 刪除整個表結...

資料庫知識點

資料庫的事務,是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成為事務,必須滿足所謂的acid 原子性 ...