## 1. MySQLä¸myisamä¸innodbçåºå«? * InnoDBæ¯æäºç©ï¼èMyISAM䏿¯æäºç© * InnoDBæ¯æè¡çº§éï¼èMyISAMæ¯æè¡¨çº§é * InnoDBæ¯æMVCC, èMyISAM䏿¯æ * InnoDBæ¯æå¤é®ï¼èMyISAM䏿¯æ * InnoDB䏿¯æå ¨æç´¢å¼ï¼èMyISAMæ¯æã ## 2. äºå¡çç¹æ§ - ååæ§ï¼æ¯æäºå¡å 嫿ææä½è¦ä¹å ¨é¨æåï¼è¦ä¹å ¨é¨å¤±è´¥åæ»ã - ä¸è´æ§ï¼æäºå¡å¿ é¡»ä½¿æ°æ®åºä»ä¸ä¸ªä¸è´æ§ç¶æåæ¢æå¦ä¸ä¸ªä¸è´æ§ç¶æï¼ä¹å°±æ¯è¯´ä¸ä¸ªäºå¡æ§è¡ä¹ååæ§è¡ä¹åé½å¿ é¡»å¤äºä¸è´æ§ç¶æã æ¿è½¬è´¦æ¥è¯´ï¼åè®¾ç¨æ· A åç¨æ· B 两è çé±å èµ·æ¥ä¸å ±æ¯ 5000ï¼é£ä¹ä¸ç®¡ A å B ä¹é´å¦ä½è½¬è´¦ï¼è½¬å 次账ï¼äºå¡ç»æåä¸¤ä¸ªç¨æ·çé±ç¸å èµ·æ¥åºè¯¥è¿å¾æ¯ 5000ï¼è¿å°±æ¯äºå¡çä¸è´æ§ã - é离æ§ï¼æ¯å½å¤ä¸ªç¨æ·å¹¶åè®¿é®æ°æ®åºæ¶ï¼æ¯å¦æä½åä¸å¼ 表æ¶ï¼æ°æ®è¡¨ä¸ºæ¯ä¸ªç¨æ·å¼å¯çäºå¡ï¼ä¸è½è¢«å ¶ä»äºå¡æå¹²æ°ï¼å¤ä¸ªå¹¶åäºå¡ä¹é´è¦ç¸äºé离ã - æä¹ æ§ï¼æä¹ æ§æ¯æä¸ä¸ªäºå¡ä¸æ¦è¢«æäº¤ï¼é£ä¹å¯¹æ°æ®åºä¸çæ°æ®çæ¹åå°±æ¯æ°¸ä¹ çï¼å³ä¾¿æ¯å¨æ°æ®åºç³»ç»éå°æ éçæ§åµä¸ä¹ä¸ä¼ä¸¢å¤±æäº¤äºå¡çæä½ã ## 3. å¹¶åæä½é®é¢ - è读ï¼èè¯»æ¯æå¨ä¸ä¸ªäºå¡å¤çè¿ç¨ä¸è¯»åå°äºå¦å¤ä¸ä¸ªæªæäº¤äºå¡ä¸çæ°æ®ã - ä¸å¯éå¤è¯»ï¼ä¸å¯éå¤è¯»æ¯æå¨å¯¹äºæ°æ®åºä¸çæä¸ªæ°æ®ï¼ä¸ä¸ªäºå¡èå´å 夿¬¡æ¥è¯¢å´è¿åäºä¸åçæ°æ®å¼ï¼è¿æ¯ç±äºå¨æ¥è¯¢é´éï¼è¢«å¦ä¸ä¸ªäºå¡ä¿®æ¹å¹¶æäº¤äºã - è读(幻读)ï¼å¹»è¯»åçå¨å½ä¸¤ä¸ªå®å ¨ç¸åçæ¥è¯¢æ§è¡æ¶ï¼ç¬¬äºæ¬¡æ¥è¯¢æè¿åçç»æéè·ç¬¬ä¸ä¸ªæ¥è¯¢ä¸ç¸åã æ¯å¦ä¸¤ä¸ªäºå¡æä½ï¼A äºå¡æ¥è¯¢ç¶æä¸º 1 çè®°å½æ¶ï¼è¿æ¶ B äºå¡æå ¥äºä¸æ¡ç¶æä¸º 1 çè®°å½ï¼A äºå¡å次æ¥è¯¢è¿åçç»æä¸ä¸æ ·ã ## 4. äºå¡çéç¦»çº§å« - Serializable(串è¡å)ï¼å¯é¿å è读ãä¸å¯éå¤è¯»ã幻读ãï¼å°±æ¯ä¸²è¡åè¯»æ°æ®ï¼ - Repeatable read(å¯éå¤è¯»)ï¼å¯é¿å è读ãä¸å¯éå¤è¯»çåçã - Read committed(读已æäº¤)ï¼å¯é¿å è读çåçã - Read uncommitted(è¯»æªæäº¤)ï¼æä½çº§å«ï¼ä»»ä½æ åµé½æ æ³ä¿è¯ã å¨ MySQL æ°æ®åºä¸ï¼æ¯æä¸é¢åç§é离级å«ï¼é»è®¤ç为 Repeatable read (å¯éå¤è¯»)ï¼èå¨ Oracle æ°æ®åºä¸ï¼åªæ¯æ Serializable (串è¡å)级å«å Read committed (读已æäº¤)è¿ä¸¤ç§çº§å«ï¼å ¶ä¸é»è®¤ç为 Read committed 级å«ã## ## 5. ç´¢å¼æ¯ä»ä¹ï¼ ç´¢å¼æ¯è¡¨çç®å½ï¼å¨æ¥æ¾å 容ä¹åå¯ä»¥å å¨ç®å½ä¸æ¥æ¾ç´¢å¼ä½ç½®ï¼ä»¥æ¤å¿«éå®ä½æ¥è¯¢æ°æ®ã对äºç´¢å¼ï¼ä¼ä¿åå¨é¢å¤çæä»¶ä¸ã ç´¢å¼æ¯å¸®å©MySQL髿è·åæ°æ®çæ°æ®ç»æã ## 6. ç´¢å¼è½å¹²ä»ä¹?æä»ä¹å¥½å¤ï¼ å½è¡¨ä¸çæ°æ®éè¶æ¥è¶å¤§æ¶ï¼ç´¢å¼å¯¹äºæ§è½çå½±åæåéè¦ãç´¢å¼è½å¤è½»æå°æ¥è¯¢æ§è½æé«å¥½å 个æ°éçº§ï¼æ»çæ¥è¯´å°±æ¯å¯ä»¥ææ¾çæé«æ¥è¯¢æçã ## 7. ç´¢å¼çç§ç±»æåªäºï¼ 1ãä»åå¨ç»æä¸æ¥ååï¼BTreeç´¢å¼ï¼B-TreeæB+Treeç´¢å¼ï¼ï¼Hashç´¢å¼ï¼full-indexå ¨æç´¢å¼ï¼R-Treeç´¢å¼ãè¿éææè¿°çæ¯ç´¢å¼å卿¶ä¿åçå½¢å¼ï¼ 2ãä»åºç¨å±æ¬¡æ¥åï¼æ®éç´¢å¼ï¼å¯ä¸ç´¢å¼ï¼å¤åç´¢å¼ 3ãæ ¹æ®ä¸æ°æ®çç©ç顺åºä¸é®å¼çé»è¾ï¼ç´¢å¼ï¼é¡ºåºå ³ç³»ï¼èéç´¢å¼ï¼éèéç´¢å¼ã å¹³æ¶è®²çç´¢å¼ç±»åä¸è¬æ¯æå¨åºç¨å±æ¬¡çååã * æ®éç´¢å¼ï¼å³ä¸ä¸ªç´¢å¼åªå å«å个åï¼ä¸ä¸ªè¡¨å¯ä»¥æå¤ä¸ªååç´¢å¼ * å¤åç´¢å¼ï¼å¤åå¼ç»æä¸ä¸ªç´¢å¼ï¼ä¸é¨ç¨äºç»åæç´¢ï¼å ¶æç大äºç´¢å¼åå¹¶ * å¯ä¸ç´¢å¼ï¼ç´¢å¼åçå¼å¿ é¡»å¯ä¸ï¼ä½å 许æç©ºå¼ ## 8. 为ä»ä¹ MySQL çç´¢å¼è¦ä½¿ç¨ B+æ è䏿¯å ¶å®æ å½¢ç»æ?æ¯å¦ B æ ï¼ B-treeï¼å 为Bæ ä¸ç®¡å¶åèç¹è¿æ¯éå¶åèç¹ï¼é½ä¼ä¿åæ°æ®ï¼è¿æ ·å¯¼è´å¨éå¶åèç¹ä¸è½ä¿åçæéæ°éåå°ï¼æäºèµæä¹ç§°ä¸ºæåºï¼ï¼æéå°çæ åµä¸è¦ä¿å大鿰æ®ï¼åªè½å¢å æ çé«åº¦ï¼å¯¼è´IOæä½åå¤ï¼æ¥è¯¢æ§è½åä½ï¼ Hashï¼è½ç¶å¯ä»¥å¿«éå®ä½ï¼ä½æ¯æ²¡æé¡ºåºï¼IOå¤æåº¦é«ã äºåæ ï¼æ çé«åº¦ä¸ååï¼ä¸è½èªå¹³è¡¡ï¼æ¥æ¾æçè·æ°æ®æå ³ï¼æ çé«åº¦ï¼ï¼å¹¶ä¸IO代价é«ã çº¢é»æ ï¼æ çé«åº¦éçæ°æ®éå¢å èå¢å ï¼IO代价é«ã **ä¸ä½¿ç¨å¹³è¡¡äºåæ çåå å¦ä¸**ï¼ æå¤§åå ï¼æ·±åº¦å¤ªå¤§(å 为ä¸ä¸ªèç¹æå¤åªæ2个åèç¹)ï¼ä¸æ¬¡æ¥è¯¢éè¦çI/Oå¤æåº¦ä¸ºO(lgN),èb+treeåªéè¦O(log_mN),èå ¶åºåº¦mé常大ï¼å ¶æ·±åº¦ä¸è¬ä¸ä¼è¶ è¿4 平衡äºåæ é»è¾ä¸å¾è¿çç¶åèç¹ï¼ç©çä¸å¯è½å¾è¿ï¼æ æ³å å忥ç£ç顺åºè¯»åé¢è¯»çé«æç¹æ§ã ## 9. MyISAMåInnoDBå®ç°BTreeç´¢å¼æ¹å¼çåºå« ### MyISAM B+Treeå¶èç¹çdataååæ¾çæ¯æ°æ®è®°å½çå°åãå¨ç´¢å¼æ£ç´¢çæ¶åï¼é¦å æç §B+Treeæç´¢ç®æ³æç´¢ç´¢å¼ï¼å¦ææå®çKeyåå¨ï¼åååºå ¶ data åçå¼ï¼ç¶å以 data åçå¼ä¸ºå°å读åç¸åºçæ°æ®è®°å½ãè¿è¢«ç§°ä¸ºâéèç°ç´¢å¼âã ç´¢å¼æä»¶åæ°æ®æä»¶æ¯å离ç ### InnoDB - InnoDB ç B+Tree ç´¢å¼å为主索å¼ï¼èéç´¢å¼ï¼åè¾ å©ç´¢å¼(éèéç´¢å¼)ãä¸å¼ 表ä¸å®å å«ä¸ä¸ªèéç´¢å¼ææç B+ æ 以åè¥å¹²è¾ å©ç´¢å¼çææç B+ æ ã - è¾ å©ç´¢å¼çåå¨å¹¶ä¸ä¼å½±åèéç´¢å¼ï¼å 为èéç´¢å¼ææç B+ æ æ¯æ°æ®å®é åå¨çå½¢å¼ï¼èè¾ å©ç´¢å¼åªç¨äºå éæ°æ®çæ¥æ¾ï¼æä»¥ä¸å¼ 表ä¸å¾å¾æå¤ä¸ªè¾ å©ç´¢å¼ä»¥æ¤æ¥æåæ°æ®åºçæ§è½ã - å°±å¾å®¹ææç½ä¸ºä»ä¹ä¸å»ºè®®ä½¿ç¨è¿é¿çåæ®µä½ä¸ºä¸»é®ï¼å 为ææè¾ å©ç´¢å¼é½å¼ç¨ä¸»ç´¢å¼ï¼è¿é¿ç主索å¼ä¼ä»¤è¾ å©ç´¢å¼åå¾è¿å¤§ãåä¾å¦ï¼ç¨éåè°çåæ®µä½ä¸ºä¸»é®å¨InnoDBä¸ä¸æ¯ä¸ªå¥½ä¸»æï¼å 为InnoDBæ°æ®æä»¶æ¬èº«æ¯ä¸é¢B+Treeï¼éåè°ç主é®ä¼é æå¨æå ¥æ°è®°å½æ¶æ°æ®æä»¶ä¸ºäºç»´æB+Treeçç¹æ§èé¢ç¹çåè£è°æ´ï¼åå使ï¼è使ç¨èªå¢å段ä½ä¸ºä¸»é®åæ¯ä¸ä¸ªå¾å¥½çéæ©ã ## 10. ä»ä¹æ¯æå·¦å¹é ååï¼ æå·¦ä¼å ï¼ä»¥æå·¦è¾¹ç为起ç¹ä»»ä½è¿ç»çç´¢å¼é½è½å¹é ä¸ãåæ¶éå°èå´æ¥è¯¢(>ã<ãbetweenãlike)å°±ä¼åæ¢å¹é ã ä¾å¦ï¼b = 2 å¦æå»ºç«(a,b)顺åºçç´¢å¼ï¼æ¯å¹é ä¸å°(a,b)ç´¢å¼çï¼ä½æ¯å¦ææ¥è¯¢æ¡ä»¶æ¯a = 1 and b = 2,å°±å¯ä»¥ï¼å 为**ä¼åå¨ä¼èªå¨è°æ´a,bç顺åº**ã忝å¦a = 1 and b = 2 and c > 3 and d = 4 å¦æå»ºç«(a,b,c,d)顺åºçç´¢å¼ï¼dæ¯ç¨ä¸å°ç´¢å¼çï¼å 为cåæ®µæ¯ä¸ä¸ªèå´æ¥è¯¢ï¼å®ä¹åçåæ®µä¼åæ¢å¹é ã **æå·¦å¹é ååçåç** MySQLä¸çç´¢å¼å¯ä»¥ä»¥ä¸å®é¡ºåºå¼ç¨å¤åï¼è¿ç§ç´¢å¼å«ä½èåç´¢å¼.æå·¦å¹é åå齿¯é对èåç´¢å¼æ¥è¯´ç - æä»¬é½ç¥éç´¢å¼çåºå±æ¯ä¸é¢B+æ ï¼é£ä¹èåç´¢å¼å½ç¶è¿æ¯ä¸é¢B+æ ï¼åªä¸è¿èåç´¢å¼çå¥å¼æ°é䏿¯ä¸ä¸ªï¼èæ¯å¤ä¸ªãæå»ºä¸é¢B+æ åªè½æ ¹æ®ä¸ä¸ªå¼æ¥æå»ºï¼å æ¤æ°æ®åºä¾æ®èåç´¢å¼æå·¦çåæ®µæ¥æå»ºB+æ ã ä¾åï¼åå¦å建ä¸ä¸ªï¼a,b)çèåç´¢å¼ï¼é£ä¹å®çç´¢å¼æ æ¯è¿æ ·çå¯ä»¥çå°aç弿¯æé¡ºåºçï¼1ï¼1ï¼2ï¼2ï¼3ï¼3ï¼èbç弿¯æ²¡æé¡ºåºç1ï¼2ï¼1ï¼4ï¼1ï¼2ãæä»¥b = 2è¿ç§æ¥è¯¢æ¡ä»¶æ²¡æåæ³å©ç¨ç´¢å¼ï¼å 为èåç´¢å¼é¦å æ¯æaæåºçï¼bæ¯æ åºçã åæ¶æä»¬è¿å¯ä»¥åç°å¨aå¼ç¸ççæ åµä¸ï¼bå¼åæ¯æé¡ºåºæåçï¼ä½æ¯è¿ç§é¡ºåºæ¯ç¸å¯¹çãæä»¥æå·¦å¹é ååéä¸èå´æ¥è¯¢å°±ä¼åæ¢ï¼å©ä¸çåæ®µé½æ æ³ä½¿ç¨ç´¢å¼ãä¾å¦a = 1 and b = 2 a,båæ®µé½å¯ä»¥ä½¿ç¨ç´¢å¼ï¼å 为å¨aå¼ç¡®å®çæ åµä¸bæ¯ç¸å¯¹æåºçï¼èa>1and b=2ï¼aåæ®µå¯ä»¥å¹é ä¸ç´¢å¼ï¼ä½bå¼ä¸å¯ä»¥ï¼å 为aç弿¯ä¸ä¸ªèå´ï¼å¨è¿ä¸ªèå´ä¸bæ¯æ åºçã ä¼ç¹ï¼æå·¦åç¼ååçå©ç¨ä¹å¯ä»¥æ¾èæé«æ¥è¯¢æçï¼æ¯å¸¸è§çMySQLæ§è½ä¼åææ®µã ## 11. åªäºåä¸éåå建索å¼ï¼åå»ºç´¢å¼æåªäºå¼éï¼ ç»å¸¸éè¦ä½ä¸ºæ¡ä»¶æ¥è¯¢çåä¸éåå建索å¼ï¼å¹¶ä¸è¯¥åä¸ä¹å¿ é¡»æä¸å®çåºå度ãå建索å¼éè¦ç»´æ¤ï¼å¨æå ¥æ°æ®çæ¶åä¼éæ°ç»´æ¤åä¸ªç´¢å¼æ ï¼æ°æ®é¡µçåè£ä¸åå¹¶ï¼ï¼å¯¹æ§è½é æå½±å ## 12. ç´¢å¼è¿ä¹å¤ä¼ç¹ï¼ä¸ºä»ä¹ä¸å¯¹è¡¨ä¸çæ¯ä¸ä¸ªåå建ä¸ä¸ªç´¢å¼å¢ï¼ 1. å½å¯¹è¡¨ä¸çæ°æ®è¿è¡å¢å ãå é¤åä¿®æ¹çæ¶åï¼ç´¢å¼ä¹è¦å¨æçç»´æ¤ï¼è¿æ ·å°±éä½äºæ°æ®çç»´æ¤é度ã 2. ç´¢å¼éè¦å ç©ç空é´ï¼é¤äºæ°æ®è¡¨å æ°æ®ç©ºé´ä¹å¤ï¼æ¯ä¸ä¸ªç´¢å¼è¿è¦å ä¸å®çç©ç空é´ï¼å¦æè¦å»ºç«èç°ç´¢å¼ï¼é£ä¹éè¦ç空é´å°±ä¼æ´å¤§ã 3. å建索å¼åç»´æ¤ç´¢å¼è¦èè´¹æ¶é´ï¼è¿ç§æ¶é´éçæ°æ®éçå¢å èå¢å ã ## 13. **MySQL建表ççº¦ææ¡ä»¶æåªäº**ï¼ - 主é®çº¦æï¼Primay Key Coustraintï¼ å¯ä¸æ§ï¼éç©ºæ§ - å¯ä¸çº¦æ ï¼Unique Counstraintï¼å¯ä¸æ§ï¼å¯ä»¥ç©ºï¼ä½åªè½æä¸ä¸ª - æ£æ¥çº¦æ (Check Counstraint) å¯¹è¯¥åæ°æ®çèå´ãæ ¼å¼çéå¶ - é»è®¤çº¦æ (Default Counstraint) è¯¥æ°æ®çé»è®¤å¼ - å¤é®çº¦æ (Foreign Key Counstraint) éè¦å»ºç«ä¸¤è¡¨é´çå ³ç³»å¹¶å¼ç¨ä¸»è¡¨çå ## 14. MySQLæ§è¡æ¥è¯¢çè¿ç¨ï¼ 1. 客æ·ç«¯éè¿TCPè¿æ¥åéè¿æ¥è¯·æ±å°mysqlè¿æ¥å¨ï¼è¿æ¥å¨ä¼å¯¹è¯¥è¯·æ±è¿è¡æééªè¯åè¿æ¥èµæºåé 2. æ¥ç¼åãï¼å½å¤æç¼åæ¯å¦å½ä¸æ¶ï¼MySQLä¸ä¼è¿è¡è§£ææ¥è¯¢è¯å¥ï¼èæ¯ç´æ¥ä½¿ç¨SQLè¯å¥å客æ·ç«¯åéè¿æ¥çå ¶ä»åå§ä¿¡æ¯ãæä»¥ï¼ä»»ä½å符ä¸çä¸åï¼ä¾å¦ç©ºæ ¼ã注解çé½ä¼å¯¼è´ç¼åçä¸å½ä¸ãï¼ 3. è¯æ³åæï¼SQLè¯æ³æ¯å¦åéäºï¼ã å¦ä½æè¯å¥ç»å°é¢å¤çå¨ï¼æ£æ¥æ°æ®è¡¨åæ°æ®åæ¯å¦åå¨ï¼è§£æå«åçæ¯å¦å卿§ä¹ã 4. ä¼åãæ¯å¦ä½¿ç¨ç´¢å¼ï¼çææ§è¡è®¡åã 5. äº¤ç»æ§è¡å¨ï¼å°æ°æ®ä¿åå°ç»æéä¸ï¼åæ¶ä¼éæ¥å°æ°æ®ç¼åå°æ¥è¯¢ç¼åä¸ï¼æç»å°ç»æéè¿åç»å®¢æ·ç«¯ã  ## 15. MySQLçbinlogææå ç§å½å ¥æ ¼å¼?å嫿ä»ä¹åºå«? æä¸ç§æ ¼å¼,statement,rowåmixed. - statement模å¼ä¸,è®°å½åå 为è¯å¥.峿¯ä¸ä¸ªsqlé æçå½±åä¼è®°å½.ç±äºsqlçæ§è¡æ¯æä¸ä¸æç,å æ¤å¨ä¿åçæ¶åéè¦ä¿åç¸å ³çä¿¡æ¯,åæ¶è¿æä¸äºä½¿ç¨äºå½æ°ä¹ç±»çè¯å¥æ æ³è¢«è®°å½å¤å¶. - row级å«ä¸,è®°å½åå 为æ¯ä¸è¡çæ¹å¨,åºæ¬æ¯å¯ä»¥å ¨é¨è®°ä¸æ¥ä½æ¯ç±äºå¾å¤æä½,ä¼å¯¼è´å¤§éè¡çæ¹å¨(æ¯å¦alter table),å æ¤è¿ç§æ¨¡å¼çæä»¶ä¿åçä¿¡æ¯å¤ªå¤,æ¥å¿é太大ã - mixed. ä¸ç§æä¸çæ¹æ¡,æ®éæä½ä½¿ç¨statementè®°å½,彿 æ³ä½¿ç¨statementçæ¶å使ç¨row. æ¤å¤,æ°ççMySQLä¸å¯¹row级å«ä¹åäºä¸äºä¼å,å½è¡¨ç»æåçååçæ¶å,ä¼è®°å½è¯å¥è䏿¯éè¡è®°å½.