課程回顧
1.存儲過程:是SQL語句和控制語句的預(yù)編譯集合溜畅,以一個名稱存儲并作為一個單元處理。
2.參數(shù):輸入類型、輸出類型、輸入&&輸出類型
3.創(chuàng)建:CREATE...PROCEDURE...
4.注意事項:
- 創(chuàng)建存儲過程或者自定義函數(shù)時需要通過delimiter語句修改定界符
- 如果函數(shù)體或過程體有多個語句虽另,需要包含在BEGIN...END語句塊中
- 存儲過程通過call調(diào)用
存儲引擎簡介
查看數(shù)據(jù)表的創(chuàng)建命令:SHOW CREATE table tbl_name
使用SHOW CREATE TABLE t;
命令查看創(chuàng)建表t的命令,可以看到ENGINE=InnoDB這就是存儲引擎
存儲引擎:MySQL可以將數(shù)據(jù)以不同的技術(shù)存儲在文件(內(nèi)存)中性含,這種技術(shù)就稱為存儲引擎。
每一種存儲引擎使用不同的存儲機制鸳惯、索引技巧商蕴、鎖定水平,最終提供廣泛且不同的功能芝发。
MySQL支持的存儲引擎:
存儲引擎:
- MyISAM
- InnoDB
- Memory
- CSV
- Archive
相關(guān)知識點之并發(fā)處理
并發(fā)控制:當多個連接對記錄進行修改時保證數(shù)據(jù)的一致性和完整性绪商。
例如兩個客戶端同時進行讀取和刪除操作,就會產(chǎn)生并發(fā)問題
在解決并發(fā)問題時辅鲸,系統(tǒng)會使用一套鎖系統(tǒng)
鎖:
- 共享鎖(讀鎖):在同一時間段內(nèi)格郁,多個用戶可以讀取同一個資源,讀取過程中數(shù)據(jù)不會發(fā)生任何變化独悴。
- 排它鎖(寫鎖):在任何時候只能有一個用戶寫入資源例书,當進行寫鎖時會阻塞其他的讀鎖或者寫鎖操作滔金。
鎖的粒度(顆粒):鎖定的單位盾剩,只需要對修改的數(shù)據(jù)加鎖髓介,無需對所有資源加鎖
加鎖會增加MySQL系統(tǒng)的開銷炎滞,所以可以通過鎖策略在鎖開銷和數(shù)據(jù)安全之間尋求一種平衡
鎖顆粒:
- 表鎖错英,是一種開銷最小的策略鎖免都。當用戶對數(shù)據(jù)表操作時启绰,就可以獲得寫權(quán)限满粗,寫鎖會禁止其他用戶進行讀寫操作爱谁。如果對數(shù)據(jù)表加上表所晒喷,其他所有用戶都將無法操作,也就是這張表只能有一個鎖
- 行鎖访敌,是一種開銷最大的策略鎖凉敲。也是支持最大并發(fā)操作處理的情況。行鎖可能對于數(shù)據(jù)表中的每一條記錄都加鎖寺旺,所以是一種開銷最大的鎖策略荡陷。
相關(guān)知識點之事務(wù)處理
事務(wù)是數(shù)據(jù)庫區(qū)別于文件系統(tǒng)的重要特征之一
事務(wù)用于保證數(shù)據(jù)庫的完整性
實現(xiàn)步驟:
1.從當前賬戶減掉200元(賬戶余額大于等于200元)
2.在對方賬戶增加200元
這兩個過程應(yīng)該作為一個整體看待,這兩個過程無論哪一個出現(xiàn)問題迅涮,都應(yīng)該將數(shù)據(jù)恢復(fù)為原始狀態(tài)
事務(wù)的特性
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔離性(Isolation)
- 持久性(Durability)
相關(guān)知識點之外鍵和索引
外鍵:保證數(shù)據(jù)一致性的策略
索引:對數(shù)據(jù)表中一列或多列的值進行排序的一種結(jié)構(gòu)
使用索引可以快速的訪問數(shù)據(jù)庫中的一些信息废赞,是進行快速記錄的一種方法,類似于書的目錄
索引分類:普通索引叮姑、唯一索引唉地、全文索引据悔、btree索引、hash索引等
各個存儲引擎的特點
各個存儲引擎的特點就是根據(jù)以上這些特性劃分的
通常用的多的是MyISAM和InooDB存儲引擎
MyISAM:適用于事務(wù)的處理不多的情況
InooDB:適用于事務(wù)處理較多耘沼,需要有外鍵支持的情況
其他存儲引擎:用的不多
- CSV:是由'极颓,'分割的存儲引擎,他會在數(shù)據(jù)庫子目錄中為每一個表創(chuàng)建一個.csv的文件群嗤,.csv文件是一種普通文本文件菠隆,每一個數(shù)據(jù)行占用一個文本行,csv存儲引擎不支持索引
- BlackHole:黑洞引擎狂秘,寫入的數(shù)據(jù)都會消失骇径,一般用于數(shù)據(jù)復(fù)制的中繼
設(shè)置存儲引擎
方法一:修改配置文件
通過修改MySQL配置文件實現(xiàn):
default-storage-engine = engine
在MySQL5.5版本中默認使用的是InooDB
方法二:創(chuàng)建數(shù)據(jù)表命令實現(xiàn)
通過創(chuàng)建數(shù)據(jù)表命令實現(xiàn)
CREATE TABLE table_name(
...
...
) ENGINE = engine;
示例演示:創(chuàng)建一張表并把存儲引擎設(shè)置為MyISAM
CREATE TABLE tp1(
s1 VARCHAR(10)
) ENGINE = MyISAM;
使用SHOW CREATE TABLE tp1;
查看創(chuàng)建數(shù)據(jù)表的命令可以看到存儲引擎已經(jīng)被修改成了 MyISAM
通過修改數(shù)據(jù)表的命令實現(xiàn):
ALTER TABLE table_name ENGINE [=] engine_name;
ALTER TABLE tp1 ENGINE = InnoDB;#修改tp1表的存儲引擎為InooDB
使用SHOW CREATE TABLE tp1;
查看創(chuàng)建數(shù)據(jù)表的命令可以看到存儲引擎已經(jīng)被修改成了 InnoDB
總結(jié):
主要的存儲引擎:
MyISAM:存儲限制可達256TB,支持索引者春、表級鎖定破衔、數(shù)據(jù)壓縮。
InnoDB:存儲限制為64TB钱烟,支持事務(wù)和索引晰筛,鎖顆粒為行鎖。