#劍指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 原子性 ...