Javaé¢è¯éå ³æåï¼Javaå¦ä¹ æåï¼æ¬¢è¿Starï¼ä¼ä¸ç´å®åä¸å»ï¼æ¬¢è¿å»ºè®®åæå¯¼ï¼ï¼[https://github.com/Snailclimb/Java_Guide](https://github.com/Snailclimb/Java_Guide) > ## ä¹¦ç±æ¨è **ã髿§è½MySQL : 第3çã** > ## æåæç¨æ¨è [MySQL æç¨ï¼è鏿ç¨ï¼](http://www.runoob.com/mysql/mysql-tutorial.html) [MySQLæç¨ï¼æç¾æç¨ï¼](https://www.yiibai.com/mysql/) > ## è§é¢æç¨æ¨è **åºç¡å ¥é¨ï¼** [ä¸MySQLçé¶è·ç¦»æ¥è§¦-æ 课ç½](https://www.imooc.com/learn/122) **Mysqlå¼åæå·§ï¼** [MySQLå¼åæå·§ï¼ä¸ï¼](https://www.imooc.com/learn/398)ãã[MySQLå¼åæå·§ï¼äºï¼](https://www.imooc.com/learn/427)ãã[MySQLå¼åæå·§ï¼ä¸ï¼](https://www.imooc.com/learn/449) **Mysql5.7æ°ç¹æ§åç¸å ³ä¼åæå·§ï¼** [MySQL5.7çæ¬æ°ç¹æ§](https://www.imooc.com/learn/533)ãã[æ§è½ä¼åä¹MySQLä¼å](https://www.imooc.com/learn/194) [MySQLé群ï¼PXCï¼å ¥é¨](https://www.imooc.com/learn/993)ãã[MyCATå ¥é¨ååºç¨](https://www.imooc.com/learn/951) > ## 常è§é®é¢æ»ç» - ### â åå¨å¼æ [MySQL常è§ç两ç§åå¨å¼æï¼MyISAMä¸InnoDBçç±æ¨æ ä»](https://juejin.im/post/5b1685bef265da6e5c3c1c34) - ### â¡å符éåæ ¡å¯¹è§å å符éæçæ¯ä¸ç§ä»äºè¿å¶ç¼ç å°æç±»å符符å·çæ å°ãæ ¡å¯¹è§å忝ææç§å符éä¸çæåºè§åãMysql䏿¯ä¸ç§å符éé½ä¼å¯¹åºä¸ç³»åçæ ¡å¯¹è§åã Mysqléç¨çæ¯ç±»ä¼¼ç»§æ¿çæ¹å¼æå®å符éçé»è®¤å¼ï¼æ¯ä¸ªæ°æ®åºä»¥åæ¯å¼ æ°æ®è¡¨é½æèªå·±çé»è®¤å¼ï¼ä»ä»¬éå±ç»§æ¿ãæ¯å¦ï¼æä¸ªåºä¸ææè¡¨çé»è®¤å符éå°æ¯è¯¥æ°æ®åºææå®çå符éï¼è¿äºè¡¨å¨æ²¡ææå®å符éçæ åµä¸ï¼æä¼éç¨é»è®¤å符éï¼ PSï¼æ´çèªãJavaå·¥ç¨å¸ä¿®ç¼ä¹éã 详ç»å 容å¯ä»¥åèï¼ [MySQLå符éåæ ¡å¯¹è§åççè§£](https://www.cnblogs.com/geaozhang/p/6724393.html#mysqlyuzifuji) - ### â¢ç´¢å¼ç¸å ³çå å®¹ï¼æ°æ®åºä½¿ç¨ä¸éå¸¸å ³é®çææ¯ï¼åçæ£ç¡®ç使ç¨ç´¢å¼å¯ä»¥å¤§å¤§æé«æ°æ®åºçæ¥è¯¢æ§è½ï¼ ããMysqlç´¢å¼ä½¿ç¨çæ°æ®ç»æä¸»è¦æ**BTreeç´¢å¼** å **åå¸ç´¢å¼** ã对äºåå¸ç´¢å¼æ¥è¯´ï¼åºå±çæ°æ®ç»æå°±æ¯åå¸è¡¨ï¼å æ¤å¨ç»å¤§å¤æ°éæ±ä¸ºåæ¡è®°å½æ¥è¯¢çæ¶åï¼å¯ä»¥éæ©åå¸ç´¢å¼ï¼æ¥è¯¢æ§è½æå¿«ï¼å ¶ä½å¤§é¨ååºæ¯ï¼å»ºè®®éæ©BTreeç´¢å¼ã ããMysqlçBTreeç´¢å¼ä½¿ç¨çæ¯Bæ°ä¸çB+Treeï¼ä½å¯¹äºä¸»è¦ç两ç§åå¨å¼æçå®ç°æ¹å¼æ¯ä¸åçã ãã**MyISAM:** B+Treeå¶èç¹çdataååæ¾çæ¯æ°æ®è®°å½çå°åãå¨ç´¢å¼æ£ç´¢çæ¶åï¼é¦å æç §B+Treeæç´¢ç®æ³æç´¢ç´¢å¼ï¼å¦ææå®çKeyåå¨ï¼åååºå ¶ data åçå¼ï¼ç¶å以 data åçå¼ä¸ºå°å读åç¸åºçæ°æ®è®°å½ãè¿è¢«ç§°ä¸ºâéèç°ç´¢å¼âã ãã**InnoDB:** å ¶æ°æ®æä»¶æ¬èº«å°±æ¯ç´¢å¼æä»¶ãç¸æ¯MyISAMï¼ç´¢å¼æä»¶åæ°æ®æä»¶æ¯å离çï¼å ¶è¡¨æ°æ®æä»¶æ¬èº«å°±æ¯æB+Treeç»ç»çä¸ä¸ªç´¢å¼ç»æï¼æ çå¶èç¹dataåä¿åäºå®æ´çæ°æ®è®°å½ãè¿ä¸ªç´¢å¼çkeyæ¯æ°æ®è¡¨ç主é®ï¼å æ¤InnoDBè¡¨æ°æ®æä»¶æ¬èº«å°±æ¯ä¸»ç´¢å¼ãè¿è¢«ç§°ä¸ºâèç°ç´¢å¼ï¼æèéç´¢å¼ï¼âãèå ¶ä½çç´¢å¼é½ä½ä¸ºè¾ å©ç´¢å¼ï¼è¾ å©ç´¢å¼çdataååå¨ç¸åºè®°å½ä¸»é®çå¼è䏿¯å°åï¼è¿ä¹æ¯åMyISAMä¸åçå°æ¹ã**卿 ¹æ®ä¸»ç´¢å¼æç´¢æ¶ï¼ç´æ¥æ¾å°keyæå¨çèç¹å³å¯ååºæ°æ®ï¼å¨æ ¹æ®è¾ å©ç´¢å¼æ¥æ¾æ¶ï¼åéè¦å ååºä¸»é®çå¼ï¼åèµ°ä¸é主索å¼ã** **å æ¤ï¼å¨è®¾è®¡è¡¨çæ¶åï¼ä¸å»ºè®®ä½¿ç¨è¿é¿çåæ®µä½ä¸ºä¸»é®ï¼ä¹ä¸å»ºè®®ä½¿ç¨éåè°çåæ®µä½ä¸ºä¸»é®ï¼è¿æ ·ä¼é æä¸»ç´¢å¼é¢ç¹åè£ã** PSï¼æ´çèªãJavaå·¥ç¨å¸ä¿®ç¼ä¹éã 详ç»å 容å¯ä»¥åèï¼ [干货ï¼mysqlç´¢å¼çæ°æ®ç»æ](https://www.jianshu.com/p/1775b4ff123a) [MySQLä¼åç³»åï¼ä¸ï¼--ç´¢å¼ç使ç¨ãåçå设计ä¼å](https://blog.csdn.net/Jack__Frost/article/details/72571540) [æ°æ®åºä¸¤å¤§ç¥å¨ãç´¢å¼åéã](https://juejin.im/post/5b55b842f265da0f9e589e79#comment) - ### â£æ¥è¯¢ç¼åçä½¿ç¨ my.cnfå å ¥ä»¥ä¸é ç½®ï¼éå¯Mysqlå¼å¯æ¥è¯¢ç¼å ``` query_cache_type=1 query_cache_size=600000 ``` Mysqlæ§è¡ä»¥ä¸å½ä»¤ä¹å¯ä»¥å¼å¯æ¥è¯¢ç¼å ``` set global query_cache_type=1; set global query_cache_size=600000; ``` å¦ä¸ï¼**å¼å¯æ¥è¯¢ç¼ååå¨åæ ·çæ¥è¯¢æ¡ä»¶ä»¥åæ°æ®æ åµä¸ï¼ä¼ç´æ¥å¨ç¼åä¸è¿åç»æ**ãè¿éçæ¥è¯¢æ¡ä»¶å æ¬æ¥è¯¢æ¬èº«ãå½åè¦æ¥è¯¢çæ°æ®åºã客æ·ç«¯åè®®çæ¬å·çä¸äºå¯è½å½±åç»æçä¿¡æ¯ãå æ¤ä»»ä½ä¸¤ä¸ªæ¥è¯¢å¨ä»»ä½å符ä¸çä¸åé½ä¼å¯¼è´ç¼åä¸å½ä¸ãæ¤å¤ï¼å¦ææ¥è¯¢ä¸å å«ä»»ä½ç¨æ·èªå®ä¹å½æ°ãåå¨å½æ°ãç¨æ·åéã临æ¶è¡¨ãMysqlåºä¸çç³»ç»è¡¨ï¼å ¶æ¥è¯¢ç»æä¹ä¸ä¼è¢«ç¼åã ç¼å建ç«ä¹åï¼Mysqlçæ¥è¯¢ç¼åç³»ç»ä¼è·è¸ªæ¥è¯¢ä¸æ¶åçæ¯å¼ è¡¨ï¼å¦æè¿äºè¡¨ï¼æ°æ®æç»æï¼åçååï¼é£ä¹åè¿å¼ 表ç¸å ³çææç¼åæ°æ®é½å°å¤±æã **ç¼åè½ç¶è½å¤æåæ°æ®åºçæ¥è¯¢æ§è½ï¼ä½æ¯ç¼ååæ¶ä¹å¸¦æ¥äºé¢å¤çå¼éï¼æ¯æ¬¡æ¥è¯¢åé½è¦å䏿¬¡ç¼åæä½ï¼å¤±æåè¿è¦éæ¯ã** å æ¤ï¼å¼å¯ç¼åæ¥è¯¢è¦è°¨æ ï¼å°¤å ¶å¯¹äºåå¯éçåºç¨æ¥è¯´æ´æ¯å¦æ¤ã妿å¼å¯ï¼è¦æ³¨æåçæ§å¶ç¼å空é´å¤§å°ï¼ä¸è¬æ¥è¯´å ¶å¤§å°è®¾ç½®ä¸ºå åMBæ¯è¾åéãæ¤å¤ï¼**è¿å¯ä»¥éè¿sql_cacheåsql_no_cacheæ¥æ§å¶æä¸ªæ¥è¯¢è¯å¥æ¯å¦éè¦ç¼åï¼** ``` select sql_no_cache count(*) from usr; ``` - ### â¤äºå¡æºå¶ **å ³ç³»æ§æ°æ®åºéè¦éµå¾ªACIDè§åï¼å ·ä½å 容å¦ä¸ï¼**  1. **ååæ§ï¼** äºå¡æ¯æå°çæ§è¡åä½ï¼ä¸å 许åå²ãäºå¡çååæ§ç¡®ä¿å¨ä½è¦ä¹å ¨é¨å®æï¼è¦ä¹å®å ¨ä¸èµ·ä½ç¨ï¼ 2. **ä¸è´æ§ï¼** æ§è¡äºå¡ååï¼æ°æ®åºä»ä¸ä¸ªä¸è´æ§ç¶æè½¬æ¢å°å¦ä¸ä¸ªä¸è´æ§ç¶æã 3. **é离æ§ï¼** å¹¶åè®¿é®æ°æ®åºæ¶ï¼ä¸ä¸ªç¨æ·çäºç©ä¸è¢«å ¶ä»äºå¡æå¹²æ°ï¼åå¹¶åäºå¡ä¹é´æ°æ®åºæ¯ç¬ç«çï¼ 4. **æä¹ æ§ï¼** ä¸ä¸ªäºå¡è¢«æäº¤ä¹åãå®å¯¹æ°æ®åºä¸æ°æ®çæ¹åæ¯æä¹ çï¼å³ä½¿æ°æ®åº åçæ éä¹ä¸åºè¯¥å¯¹å ¶æä»»ä½å½±åã **为äºè¾¾å°ä¸è¿°äºå¡ç¹æ§ï¼æ°æ®åºå®ä¹äºå ç§ä¸åçäºå¡é离级å«ï¼** - **READ_UNCOMMITTEDï¼æªæäº¤è¯»ï¼:** æä½çé离级å«ï¼å 许读åå°æªæäº¤çæ°æ®åæ´ï¼**å¯è½ä¼å¯¼è´è读ã幻读æä¸å¯éå¤è¯»** - **READ_COMMITTEDï¼æäº¤è¯»ï¼:** å 许读åå¹¶åäºå¡å·²ç»æäº¤çæ°æ®ï¼**å¯ä»¥é»æ¢è读ï¼ä½æ¯å¹»è¯»æä¸å¯éå¤è¯»ä»æå¯è½åç** - **REPEATABLE_READï¼å¯éå¤è¯»ï¼:** 对åä¸å段ç夿¬¡è¯»åç»æé½æ¯ä¸è´çï¼é¤éæ°æ®æ¯è¢«æ¬èº«äºå¡èªå·±æä¿®æ¹ï¼**å¯ä»¥é»æ¢è读åä¸å¯éå¤è¯»ï¼ä½å¹»è¯»ä»æå¯è½åçã** - **SERIALIZABLEï¼ä¸²è¡ï¼:** æé«çé离级å«ï¼å®å ¨æä»ACIDçé离级å«ãææçäºå¡ä¾æ¬¡é个æ§è¡ï¼è¿æ ·äºå¡ä¹é´å°±å®å ¨ä¸å¯è½äº§çå¹²æ°ï¼ä¹å°±æ¯è¯´ï¼**该级å«å¯ä»¥é²æ¢è读ãä¸å¯éå¤è¯»ä»¥å幻读**ã使¯è¿å°ä¸¥éå½±åç¨åºçæ§è½ãé常æ åµä¸ä¹ä¸ä¼ç¨å°è¯¥çº§å«ã è¿ééè¦æ³¨æçæ¯ï¼**Mysql é»è®¤éç¨ç REPEATABLE_READéç¦»çº§å« Oracle é»è®¤éç¨ç READ_COMMITTEDé离级å«.** äºå¡é离æºå¶çå®ç°åºäºéæºå¶åå¹¶åè°åº¦ãå ¶ä¸å¹¶åè°åº¦ä½¿ç¨çæ¯MVCCï¼å¤çæ¬å¹¶åæ§å¶ï¼ï¼éè¿è¡çå建æ¶é´åè¡çè¿ææ¶é´æ¥æ¯æå¹¶åä¸è´æ§è¯»ååæ»çç¹æ§ã 详ç»å 容å¯ä»¥åèï¼ [å¯è½æ¯ææ¼äº®çSpringäºå¡ç®¡ç详解](https://blog.csdn.net/qq_34337272/article/details/80394121) - ### â¥éæºå¶ä¸InnoDBéç®æ³ **MyISAMåInnoDBåå¨å¼æä½¿ç¨çéï¼** - MyISAMéç¨è¡¨çº§é(table-level locking)ã - InnoDBæ¯æè¡çº§é(row-level locking)å表级é,é»è®¤ä¸ºè¡çº§é **表级éåè¡çº§é对æ¯ï¼** - **表级éï¼** Mysqlä¸éå® **ç²åº¦æå¤§** çä¸ç§éï¼å¯¹å½åæä½çæ´å¼ 表å éï¼å®ç°ç®åï¼èµæºæ¶è乿¯è¾å°ï¼å éå¿«ï¼ä¸ä¼åºç°æ»éãå ¶éå®ç²åº¦æå¤§ï¼è§¦åéå²çªçæ¦çæé«ï¼å¹¶å度æä½ï¼MyISAMå InnoDB弿齿¯æè¡¨çº§éã - **è¡çº§éï¼** Mysqlä¸éå® **ç²åº¦æå°** çä¸ç§éï¼åªé对å½åæä½çè¡è¿è¡å éã è¡çº§éè½å¤§å¤§åå°æ°æ®åºæä½çå²çªãå ¶å éç²åº¦æå°ï¼å¹¶å度é«ï¼ä½å éçå¼é乿大ï¼å éæ ¢ï¼ä¼åºç°æ»éã 详ç»å 容å¯ä»¥åèï¼ [Mysqléæºå¶ç®åäºè§£ä¸ä¸](https://blog.csdn.net/qq_34337272/article/details/80611486) **InnoDBåå¨å¼æçéçç®æ³æä¸ç§ï¼** - Record lockï¼å个è¡è®°å½ä¸çé - Gap lockï¼é´ééï¼éå®ä¸ä¸ªèå´ï¼ä¸å æ¬è®°å½æ¬èº« - Next-key lockï¼record+gap éå®ä¸ä¸ªèå´ï¼å å«è®°å½æ¬èº« **ç¸å ³ç¥è¯ç¹ï¼** 1. innodb对äºè¡çæ¥è¯¢ä½¿ç¨next-key lock 2. Next-locking keying为äºè§£å³Phantom Problem幻读é®é¢ 3. 彿¥è¯¢çç´¢å¼å«æå¯ä¸å±æ§æ¶ï¼å°next-key locké级为record key 4. Gapé设计çç®çæ¯ä¸ºäºé»æ¢å¤ä¸ªäºå¡å°è®°å½æå ¥å°åä¸èå´å ï¼èè¿ä¼å¯¼è´å¹»è¯»é®é¢ç产ç 5. æä¸¤ç§æ¹å¼æ¾å¼å ³égapéï¼ï¼é¤äºå¤é®çº¦æåå¯ä¸æ§æ£æ¥å¤ï¼å ¶ä½æ åµä» 使ç¨record lockï¼ A. å°äºå¡é离级å«è®¾ç½®ä¸ºRC B. å°åæ°innodb_locks_unsafe_for_binlog设置为1 - ### â¦å¤§è¡¨ä¼å å½MySQLåè¡¨è®°å½æ°è¿å¤§æ¶ï¼æ°æ®åºçCRUDæ§è½ä¼ææ¾ä¸éï¼ä¸äºå¸¸è§çä¼åæªæ½å¦ä¸ï¼ 1. **é宿°æ®çèå´ï¼** å¡å¿ ç¦æ¢ä¸å¸¦ä»»ä½éå¶æ°æ®èå´æ¡ä»¶çæ¥è¯¢è¯å¥ãæ¯å¦ï¼æä»¬å½ç¨æ·å¨æ¥è¯¢è®¢ååå²çæ¶åï¼æä»¬å¯ä»¥æ§å¶å¨ä¸ä¸ªæçèå´å ãï¼ 2. **读/åå离ï¼** ç»å ¸çæ°æ®åºæåæ¹æ¡ï¼ä¸»åºè´è´£åï¼ä»åºè´è´£è¯»ï¼ 3 . **åç´ååºï¼** **æ ¹æ®æ°æ®åºé颿°æ®è¡¨çç¸å ³æ§è¿è¡æåã** ä¾å¦ï¼ç¨æ·è¡¨ä¸æ¢æç¨æ·çç»å½ä¿¡æ¯åæç¨æ·çåºæ¬ä¿¡æ¯ï¼å¯ä»¥å°ç¨æ·è¡¨æåæä¸¤ä¸ªåç¬ç表ï¼çè³æ¾å°åç¬çåºåååºã **ç®åæ¥è¯´åç´æåæ¯ææ°æ®è¡¨åçæåï¼æä¸å¼ 忝è¾å¤ç表æå为å¤å¼ 表ã** å¦ä¸å¾æç¤ºï¼è¿æ ·æ¥è¯´å¤§å®¶åºè¯¥å°±æ´å®¹æçè§£äºã  **åç´æåçä¼ç¹ï¼** å¯ä»¥ä½¿å¾è¡æ°æ®åå°ï¼å¨æ¥è¯¢æ¶åå°è¯»åçBlockæ°ï¼åå°I/O次æ°ãæ¤å¤ï¼åç´ååºå¯ä»¥ç®å表çç»æï¼æäºç»´æ¤ã **åç´æåç缺ç¹ï¼** 主é®ä¼åºç°åä½ï¼éè¦ç®¡çåä½åï¼å¹¶ä¼å¼èµ·Joinæä½ï¼å¯ä»¥éè¿å¨åºç¨å±è¿è¡Joinæ¥è§£å³ãæ¤å¤ï¼åç´ååºä¼è®©äºå¡å徿´å å¤æï¼ 4. **æ°´å¹³ååºï¼** **ä¿ææ°æ®è¡¨ç»æä¸åï¼éè¿æç§çç¥å卿°æ®åçãè¿æ ·æ¯ä¸çæ°æ®åæ£å°ä¸åç表æè åºä¸ï¼è¾¾å°äºåå¸å¼çç®çã æ°´å¹³æåå¯ä»¥æ¯æéå¸¸å¤§çæ°æ®éã** æ°´å¹³æåæ¯ææ°æ®è¡¨è¡çæåï¼è¡¨çè¡æ°è¶ è¿200ä¸è¡æ¶ï¼å°±ä¼åæ ¢ï¼è¿æ¶å¯ä»¥æä¸å¼ çè¡¨çæ°æ®ææå¤å¼ 表æ¥åæ¾ã举个ä¾åï¼æä»¬å¯ä»¥å°ç¨æ·ä¿¡æ¯è¡¨æåæå¤ä¸ªç¨æ·ä¿¡æ¯è¡¨ï¼è¿æ ·å°±å¯ä»¥é¿å åä¸è¡¨æ°æ®éè¿å¤§å¯¹æ§è½é æå½±åã  æ°´å¹³æåå¯ä»¥æ¯æéå¸¸å¤§çæ°æ®éãéè¦æ³¨æçä¸ç¹æ¯:åè¡¨ä» ä» æ¯è§£å³äºåä¸è¡¨æ°æ®è¿å¤§çé®é¢ï¼ä½ç±äºè¡¨çæ°æ®è¿æ¯å¨åä¸å°æºå¨ä¸ï¼å ¶å®å¯¹äºæåMySQLå¹¶åè½å没æä»ä¹æä¹ï¼æä»¥ **æ°´å¹³æåæå¥½ååº** ã æ°´å¹³æåè½å¤ **æ¯æéå¸¸å¤§çæ°æ®éåå¨ï¼åºç¨ç«¯æ¹é ä¹å°**ï¼ä½ **åçäºå¡é¾ä»¥è§£å³** ï¼è·¨çç¹Joinæ§è½è¾å·®ï¼é»è¾å¤æããJavaå·¥ç¨å¸ä¿®ç¼ä¹éãçä½è æ¨è **å°½éä¸è¦å¯¹æ°æ®è¿è¡åçï¼å 为æåä¼å¸¦æ¥é»è¾ãé¨ç½²ãè¿ç»´çåç§å¤æåº¦** ï¼ä¸è¬çæ°æ®è¡¨å¨ä¼åå¾å½çæ åµä¸æ¯æåä¸ä»¥ä¸çæ°æ®éæ¯æ²¡æå¤ªå¤§é®é¢çã妿å®å¨è¦åçï¼å°½é鿩客æ·ç«¯åçæ¶æï¼è¿æ ·å¯ä»¥åå°ä¸æ¬¡åä¸é´ä»¶çç½ç»I/Oã **ä¸é¢è¡¥å ä¸ä¸æ°æ®åºåçç两ç§å¸¸è§æ¹æ¡ï¼** - **客æ·ç«¯ä»£çï¼** **åçé»è¾å¨åºç¨ç«¯ï¼å°è£ å¨jarå ä¸ï¼éè¿ä¿®æ¹æè å°è£ JDBC屿¥å®ç°ã** å½å½ç½ç **Sharding-JDBC** ãé¿éçTDDLæ¯ä¸¤ç§æ¯è¾å¸¸ç¨çå®ç°ã - **ä¸é´ä»¶ä»£çï¼** **å¨åºç¨åæ°æ®ä¸é´å äºä¸ä¸ªä»£çå±ãåçé»è¾ç»ä¸ç»´æ¤å¨ä¸é´ä»¶æå¡ä¸ã** æä»¬ç°å¨è°ç **Mycat** ã360çAtlasãç½æçDDBçç齿¯è¿ç§æ¶æçå®ç°ã 详ç»å 容å¯ä»¥åèï¼ [MySQL大表ä¼åæ¹æ¡](https://segmentfault.com/a/1190000006158186)