MySql學習

MySql學習筆記

MySQL數據庫存儲引擎

  • MyISM:MyISAM存儲引擎:不支持事務、也不支持外鍵,優勢是訪問速度快,對事務完整性沒有
    要求或者以select,insert爲主的應用基本上可以用這個引擎來創建表
  • InnoDB:支持事務
  • Memory:Memory存儲引擎使用存在於內存中的內容來創建表。每個memory表只實際對應一個磁盤文件,格式是.frm。memory類型的表訪問非常的快,因爲它的數據是放在內存中的,並且默認使用HASH索引,但是一旦服務關閉,表中的數據就會丟失掉。
  • Merge:Merge存儲引擎是一組MyISAM表的組合,這些MyISAM表必須結構完全相同,merge表本身並沒有數據,對merge類型的表可以進行查詢,更新,刪除操作,這些操作實際上是對內部的MyISAM表進行的。

MyISM和InnoDB的區別

  • InnoDB支持事務,而MyISM不支持事務
  • InnoDB支持行級鎖,而MyISM支持表級鎖
  • InnoDB支持外鍵,而MyISM不支持
  • InnoDB支持全文索引,而MyISM不支持
  • InnoDB是索引組織表,MyISM是堆表 (堆表的數據是隨機插入的,索引組織表的數據是有序的)

MySQL中char和varchar的區別

 char10):簡單粗暴,浪費空間,存取速度快   root存成root000000
會保存固定的長度,不足會用空格補足

 varchar:精準,節省空間,存取速度慢
 是什麼就存什麼

int類型存儲

int存儲4字節,最小值-2147483648,最大值21477483647

主鍵特徵

非空而且唯一

inner join、left join、right join、full join

inner join 保留符合條件的數據
left join 優先保留左表數據
right join 優先保留右表數據
full join 合併兩張表的數據

concat, group_concat函數

concat 將多個字符串連接成一個字符串
group_concat 對group by後的數據用逗號拼接在一起

事務

事務指的是多個sql組成一個事務,有一個sql異常,整個事務回滾

索引

索引指的是用來保存數據查找算法的一種數據結果
優點:
1. 加快數據的查找速度,減少IO操作
2. 通過索引對數據進行排序,降低了數據排序的成本,降低了CPU的利用率;
缺點:
1. 索引實際上也是一張表,索引會佔用一定的存儲空間;
2. 更新數據表的數據時,需要同時維護索引表,因此,會降低insert、update、delete的速度

什麼情況需要建索引

  1. 主鍵自動創建唯一非空索引;
  2. 頻繁作爲查詢條件的字段應該創建索引;
  3. 頻繁更新的字段不適合簡歷索引,因爲每次更新不僅僅更新數據表同時還會更新索引表;
  4. 查詢中經常排序的字段,可以考慮創建索引;
  5. 如果某個字段的重複數據較多,不適合創建普通索引;

ACID

ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)

存儲過程

存儲過程包含了一系列可執行的sql語句,存儲過程存放於MySQL中,通過調用它的名字可以執行其內部的一堆sql

視圖

視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,併爲其命名】,用戶使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用

SQL的執行計劃

生成的方法很簡單在相應的select前面加explain即可

MySql的數據類型

數字:
整型:tinyinit int bigint
小數:
float :在位數比較短的情況下不精準
double :在位數比較長的情況下不精準
0.000001230123123123
存成:0.000001230000
decimal:(如果用小數,則用推薦使用decimal)精準內部原理是以字符串形式去存
char(10):簡單粗暴,浪費空間,存取速度快
varchar:精準,節省空間,存取速度慢
時間類型:
最常用:datetime
枚舉類型與集合類型

hash索引和B+樹索引

哈希索引基於哈希表實現,只有精確匹配索引的所有列的查詢纔有效。對於每一行數據,存儲引擎都會對所有的索引列計算一個哈希碼,哈希碼是一個較小的值,並且不同鍵值的行計算出來的哈希碼也不一樣。哈希索引將所有的哈希碼存儲在索引中,同時在哈希表中保存指向每個數據行的指針。也就是說,由於哈希查找比起B-Tree索引,其本身對於單行查詢的時間複雜度更低,有了哈希索引後明顯可加快單行查詢速度。

但是哈希索引也有它自己的限制:
哈希索引只包含哈希值和行指針,而不存儲字段值,所以不能使用索引中的值來避免讀取行。不過,訪問內存中的行的速度很快,所以大部分情況下這一點對性能的影響並不明顯。
哈希索引數據並不是按照索引值順序存儲的,所以也就無法用於排序。
哈希索引也不支持部分索引列匹配查找,因爲哈希索引始終是使用索引列的全部內容來計算哈希值的。例如,在數據列(A, B)上建立哈希索引,如果查詢只有數據列A,則無法使用該索引。
哈希索引只支持等值比較查詢,包括=in()、<=>。不支持任何範圍查詢,例如where price > 100。
訪問哈希索引的數據非常快,除非有很多哈希衝突。如果哈希衝突很多的話,一些索引維護操作的代價也很高。

B+樹索引是B樹索引的變體,本質上也是多路平衡查找樹

數據備份類型

  1. 完全備份:這是大多數人常用的方式,它可以備份整個數據庫,包含用戶表、系統表、索引、視圖和存儲過程等所有數據庫對象。但它需要花費更多的時間和空間,所以,一般推薦一週做一次完全備份。
  2. 事務日誌備份    事務日誌是一個單獨的文件,它記錄數據庫的改變,備份的時候只需要複製自上次備份以來對數據庫所做的改變,所以只需要很少的時間。爲了使數據庫具有魯棒性,推薦每小時甚至更頻繁的備份事務日誌。
  3. 差異備份    也叫增量備份。它是隻備份數據庫一部分的另一種方法,它不使用事務日誌,相反,它使用整個數據庫的一種新映象。它比最初的完全備份小,因爲它只包含自上次完全備份以來所改變的數據庫。它的優點是存儲和恢復速度快。推薦每天做一次差異備份。
  4. 文件備份    數據庫可以由硬盤上的許多文件構成。如果這個數據庫非常大,並且一個晚上也不能將它備份完,那麼可以使用文件備份每晚備份數據庫的一部分。由於一般情況下數據庫不會大到必須使用多個文件存儲,所以這種備份不是很常用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章