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的區別
char(10):簡單粗暴,浪費空間,訪問速度快 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的速度
什麼情況需要建索引
主鍵自動建立唯一非空索引;
頻繁作為查詢條件的字段應該建立索引;
頻繁更新的字段不適合簡歷索引,因為每次更新不僅僅更新資料表同時還會更新索引表;
查詢中經常排序的字段,可以考慮建立索引;
如果某個欄位的重複資料較多,不適合建立普通索引;
acid
acid,指資料庫事務正確執行的四個基本要素的縮寫。包含:原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)
儲存過程
儲存過程包含了一系列可執行的sql語句,儲存過程存放於mysql中,通過呼叫它的名字可以執行其內部的一堆sql
檢視檢視是乙個虛擬表(非真實存在),其本質是【根據sql語句獲取動態的資料集,並為其命名】,使用者使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用
sql的執行計畫
生成的方法很簡單在相應的select前面加explain即可
mysql的資料型別
數字:整型:tinyinit int bigint
小數:float :在位數比較短的情況下不精準
double :在位數比較長的情況下不精準
0.000001230123123123
存成:0.000001230000
char(10):簡單粗暴,浪費空間,訪問速度快
varchar:精準,節省空間,訪問速度慢
時間型別:
最常用:datetime
列舉型別與集合型別
hash索引和b+樹索引
雜湊索引基於雜湊表實現,只有精確匹配索引的所有列的查詢才有效。對於每一行資料,儲存引擎都會對所有的索引列計算乙個雜湊碼,雜湊碼是乙個較小的值,並且不同鍵值的行計算出來的雜湊碼也不一樣。雜湊索引將所有的雜湊碼儲存在索引中,同時在雜湊表中儲存指向每個資料行的指標。也就是說,由於雜湊查詢比起b-tree索引,其本身對於單行查詢的時間複雜度更低,有了雜湊索引後明顯可加快單行查詢速度。
但是雜湊索引也有它自己的限制:
雜湊索引只包含雜湊值和行指標,而不儲存字段值,所以不能使用索引中的值來避免讀取行。不過,訪問記憶體中的行的速度很快,所以大部分情況下這一點對效能的影響並不明顯。
雜湊索引資料並不是按照索引值順序儲存的,所以也就無法用於排序。
雜湊索引也不支援部分索引列匹配查詢,因為雜湊索引始終是使用索引列的全部內容來計算雜湊值的。例如,在資料列(a, b)上建立雜湊索引,如果查詢只有資料列a,則無法使用該索引。
雜湊索引只支援等值比較查詢,包括=、in()、<=>。不支援任何範圍查詢,例如where price > 100。
訪問雜湊索引的資料非常快,除非有很多雜湊衝突。如果雜湊衝突很多的話,一些索引維護操作的代價也很高。
b+樹索引是b樹索引的變體,本質上也是多路平衡查詢樹
資料備份型別
事務日誌備份 事務日誌是乙個單獨的檔案,它記錄資料庫的改變,備份的時候只需要複製自上次備份以來對資料庫所做的改變,所以只需要很少的時間。為了使資料庫具有魯棒性,推薦每小時甚至更頻繁的備份事務日誌。
差異備份 也叫增量備份。它是只備份資料庫一部分的另一種方法,它不使用事務日誌,相反,它使用整個資料庫的一種新映象。它比最初的完全備份小,因為它只包含自上次完全備份以來所改變的資料庫。它的優點是儲存和恢復速度快。推薦每天做一次差異備份。
檔案備份 資料庫可以由硬碟上的許多檔案構成。如果這個資料庫非常大,並且乙個晚上也不能將它備份完,那麼可以使用檔案備份每晚備份資料庫的一部分。由於一般情況下資料庫不會大到必須使用多個檔案儲存,所以這種備份不是很常用
Mysq 儲存過程
drop procedure if exists xl 建立儲存過程 delimiter 轉譯字元 使用 代替 create procedure xl begin select from fd car report end delimiter 轉譯字元 使用 代替 call xl 呼叫儲存過程 de...
mysql儲存過程 MySQL儲存過程
在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...
mysql 儲存過程 mysql 儲存過程
建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...