一.一條sql語句在mysql中如何執行的?
客戶端請求 --->聯結器(驗證身份,給予許可權)-->查詢快取(存在則直接返回),不存在則執行後續操作 ---> 分析器(對sql進行詞法分析和語句分析操作) --->優化器(主要對執行的sql優化選擇最優的執行方法)--->執行器(執行時會看使用者是否有執行許可權,有才去使用這個引擎提供的介面)
二.說說mysql有哪些儲存引擎,都有哪些區別?
乙個資料庫中多個表可以使用不同引擎以班組各種效能和實際需求
-- 檢視支援的儲存引擎
show engines
-- 檢視預設儲存引擎
show variables like 'storage_engine'
常見的儲存引擎就 innodb,myisam,memory,ndb。
innodb現在是mysql預設的儲存引擎,支援事務,行鎖和外來鍵
檔案儲存結構對比
myisam 物理檔案結構為:
.frm檔案:與表相關的元資料資訊都存放在frm檔案,
.myd(mydata) 檔案:myisam儲存引擎專用,用於儲存myisam的表的資料
.myi(myindex)檔案:myisam儲存引擎專用,用於儲存myisam表的索引的相關資訊
.ibd檔案或.ibdata檔案:這兩種檔案都是存放innodb資料的檔案,之所有有兩種形式存放innodb的資料,是因為innodb的資料儲存方式能夠通過配置來決定是使用共享表空間存放儲存資料,還是用獨享表空間存放儲存資料。
獨享表空間儲存方式使用.ibd檔案 並且每個表乙個.ibd檔案,共享表空間儲存方式使用.ibdata檔案,所有表共同使用乙個.ibdata檔案(或多個,可以自己配置)
innodb支援事務,myisam不支援事務,
innodb支援外來鍵,而myisam不支援,
innodb是聚簇索引,myisam是非聚簇索引
聚簇索引的檔案存放在主鍵索引的葉子節點上,因此innodb必須要有主鍵但是輔助索引需要進行兩次查詢,第一次查到護肩,然後再通過主鍵查詢到資料,因此主鍵不應該過大
innodb不儲存表的具體函式, 執行select count(*) from table 需要掃瞄全表。而myisam用乙個變數儲存了整個表的行數,執行上述語句時只需要讀出該變數即可。
三.一張表,裡面有id自增主鍵,當insert了17條記錄之後,刪除了第15,16,17條記錄,再把mysql重啟,再insert一條記錄,這條記錄的id是18還是15 ?
如果表的型別是myisam,那麼是18,因為myisam表會把自增主鍵的最大id 記錄到資料檔案中,重啟mysql自增主鍵的最大id也不會丟失
如果表的型別是innodb,那麼是15。因為innodb 表只是把自增主鍵的最大id記錄到記憶體中,所以重啟資料庫或對錶進行option操作,都會導致最大id丟失。
四.哪個儲存引擎執行 select count(*) 更快,為什麼?
myisam更快,因為myisam內部維護了乙個計數器,可以直接調取。
在myisam儲存引擎中,把錶的總行數儲存在磁碟上,當執行select count(*) from t時,直接返回總數居。
在innodb儲存引擎中,跟myisam不一樣,沒有將總行數儲存在磁碟上,是一行一行的累加,最後返回總數量。
那為什麼innodb引擎不想myisam引擎一樣,將總行數儲存得到磁碟上,這個innodb的食物性有關,由於多版本併發控制(mvcc)的原因
char 和 varchar 的區別?
char是固定長度,varchar長度可變
儲存時,前者不管實際儲存資料的長度,直接按char規定的長度分配,而後者會根據實際儲存的資料分配最終的儲存空間。
超過char,varchar最大長度n的限制後,字串會被截斷。
能儲存的最大空間限制不一樣:char的儲存上線為255位元組。
char在儲存時會階段為不的空格,而varchar不會。
MySql基礎篇學習
用於儲存和管理資料的倉庫 1.持久化儲存資料,其實資料庫就是乙個檔案系統 2.方便儲存和管理資料 3.使用了統一的方式運算元據庫 sql 1.去mysql的安裝目錄找到my.ini檔案 複製 datadir c programdata mysql mysql server 5.5 data 2.解除...
Mysql安全基礎篇學習筆記
每天的寥寥幾筆,堅持下去,將會是乙份沉甸甸 1.使用者管理 建立乙個使用者 create user xl identified by xl identified by指定 的口令需要是純文字,它會對其進行加密 刪除乙個使用者 drop user xl 更改口令 set password for xl...
MySQL學習基礎 之 起航篇
mysql 學習來自慕課網 與mysql的零距離接觸 mysql是乙個開源的關係型資料庫管理系統 mysql分為社群版和企業版 mysql登入和退出相關的命令 引數描述 d,database name 開啟指定資料庫 delimiter name 指定分隔符 h,host name 伺服器名稱 p,...