# MySQL
## ç®ä»
### æ°æ®åº
æ°æ®åºï¼DataBaseï¼ç®ç§° DBï¼åå¨åç®¡çæ°æ®çä»åº
æ°æ®åºçä¼å¿ï¼
- å¯ä»¥æä¹
åå卿°æ®
- æ¹ä¾¿åå¨åç®¡çæ°æ®
- 使ç¨äºç»ä¸çæ¹å¼æä½æ°æ®åº SQL
æ°æ®åºãæ°æ®è¡¨ãæ°æ®çå
³ç³»ä»ç»ï¼
- æ°æ®åº
- ç¨äºåå¨åç®¡çæ°æ®çä»åº
- ä¸ä¸ªåºä¸å¯ä»¥å
å«å¤ä¸ªæ°æ®è¡¨
- æ°æ®è¡¨
- æ°æ®åºæéè¦çç»æé¨åä¹ä¸
- ç±çºµåçå忍ªåçè¡ç»æï¼ç±»ä¼¼ excel è¡¨æ ¼ï¼
- å¯ä»¥æå®ååãæ°æ®ç±»åã约æç
- ä¸ä¸ªè¡¨ä¸å¯ä»¥åå¨å¤æ¡æ°æ®
- æ°æ®ï¼æ³è¦æ°¸ä¹
ååå¨çæ°æ®
åèè§é¢ï¼https://www.bilibili.com/video/BV1zJ411M7TB
åè䏿 ï¼https://time.geekbang.org/column/intro/139
åè书ç±ï¼https://book.douban.com/subject/35231266/
***
### MySQL
MySQL æ°æ®åºæ¯ä¸ä¸ªææµè¡çå
³ç³»åæ°æ®åºç®¡çç³»ç»ä¹ä¸ï¼å
³ç³»åæ°æ®åºæ¯å°æ°æ®ä¿åå¨ä¸åçæ°æ®è¡¨ä¸ï¼èä¸è¡¨ä¸è¡¨ä¹é´å¯ä»¥æå
³èå
³ç³»ï¼æé«äºçµæ´»æ§
缺ç¹ï¼æ°æ®åå¨å¨ç£çä¸ï¼å¯¼è´è¯»åæ§è½å·®ï¼è䏿°æ®å
³ç³»å¤æï¼æ©å±æ§å·®
MySQL æä½¿ç¨ç SQL è¯å¥æ¯ç¨äºè®¿é®æ°æ®åºæå¸¸ç¨çæ ååè¯è¨
MySQL é
ç½®ï¼
* MySQL å®è£
ï¼https://www.jianshu.com/p/ba48f1e386f0
* MySQL é
ç½®ï¼
* ä¿®æ¹ MySQL é»è®¤å符éï¼å®è£
MySQL ä¹å第ä¸ä»¶äºå°±æ¯ä¿®æ¹å符éç¼ç
```mysql
vim /etc/mysql/my.cnf
æ·»å å¦ä¸å
容ï¼
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
```
* å¯å¨ MySQL æå¡ï¼
```shell
systemctl start/restart mysql
```
* ç»å½ MySQLï¼
```shell
mysql -u root -p æ²å车ï¼è¾å
¥å¯ç
åå§å¯ç æ¥çï¼cat /var/log/mysqld.log
å¨root@localhost: åé¢çå°±æ¯åå§å¯ç
```
* æ¥çé»è®¤å符éå½ä»¤ï¼
```mysql
SHOW VARIABLES LIKE 'char%';
```
* ä¿®æ¹MySQLç»å½å¯ç ï¼
```mysql
set global validate_password_policy=0;
set global validate_password_length=1;
set password=password('å¯ç ');
```
* æäºè¿ç¨è¿æ¥æéï¼MySQL å
è¾å
¥ï¼ï¼
```mysql
-- ææ
grant all privileges on *.* to 'root' @'%' identified by 'å¯ç ';
-- å·æ°
flush privileges;
```
* ä¿®æ¹ MySQL ç»å® IPï¼
```shell
cd /etc/mysql/mysql.conf.d
sudo chmod 666 mysqld.cnf
vim mysqld.cnf
# bind-address = 127.0.0.1注é该è¡
```
* å
³é Linux é²ç«å¢
```shell
systemctl stop firewalld.service
# æ¾è¡3306端å£
```
***
## ä½ç³»æ¶æ
### æ´ä½æ¶æ
ä½ç³»ç»æè¯¦è§£ï¼
* 第ä¸å±ï¼ç½ç»è¿æ¥å±
* ä¸äºå®¢æ·ç«¯å龿¥æå¡ï¼å
嫿¬å° Socket éä¿¡å大夿°åºäºå®¢æ·ç«¯/æå¡ç«¯å·¥å
·å®ç°ç TCP/IP éä¿¡ï¼ä¸»è¦å®æä¸äºç±»ä¼¼äºè¿æ¥å¤çãææè®¤è¯ãåç¸å
³çå®å
¨æ¹æ¡
* å¨è¯¥å±ä¸å¼å
¥äº**è¿æ¥æ± ** Connection Pool çæ¦å¿µï¼ç®¡çç¼å²ç¨æ·è¿æ¥ï¼çº¿ç¨å¤ççéè¦ç¼åçéæ±
* å¨è¯¥å±ä¸å®ç°åºäº SSL çå®å
¨é¾æ¥ï¼æå¡å¨ä¹ä¼ä¸ºå®å
¨æ¥å
¥çæ¯ä¸ªå®¢æ·ç«¯éªè¯å®æå
·æçæä½æé
- 第äºå±ï¼æ ¸å¿æå¡å±
* æ¥è¯¢ç¼åãåæå¨ãä¼åå¨ãæ§è¡å¨çï¼æ¶µç MySQL ç大夿°æ ¸å¿æå¡åè½ï¼ææçå
ç½®å½æ°ï¼æ¥æãæ°å¦ãå å¯å½æ°çï¼
* Management Serveices & Utilitiesï¼ç³»ç»ç®¡çåæ§å¶å·¥å
·ï¼å¤ä»½ãå®å
¨ãå¤å¶ãé群ç
* SQL Interfaceï¼æ¥åç¨æ·ç SQL å½ä»¤ï¼å¹¶ä¸è¿åç¨æ·éè¦æ¥è¯¢çç»æ
* Parserï¼SQL è¯å¥åæå¨
* Optimizerï¼æ¥è¯¢ä¼åå¨
* Caches & Buffersï¼æ¥è¯¢ç¼åï¼æå¡å¨ä¼æ¥è¯¢å
é¨çç¼åï¼å¦æç¼å空é´è¶³å¤å¤§ï¼å¯ä»¥å¨å¤§é读æä½çç¯å¢ä¸æåç³»ç»æ§è½
* ææ**è·¨åå¨å¼æçåè½**å¨è¿ä¸å±å®ç°ï¼å¦åå¨è¿ç¨ã触åå¨ãè§å¾ç
* å¨è¯¥å±æå¡å¨ä¼è§£ææ¥è¯¢å¹¶å建ç¸åºçå
é¨è§£ææ ï¼å¹¶å¯¹å
¶å®æç¸åºçä¼åå¦ç¡®å®è¡¨çæ¥è¯¢é¡ºåºï¼æ¯å¦å©ç¨ç´¢å¼çï¼ æåçæç¸åºçæ§è¡æä½
* MySQL 䏿å¡å¨å±ä¸ç®¡çäºå¡ï¼**äºå¡æ¯ç±åå¨å¼æå®ç°ç**
- 第ä¸å±ï¼åå¨å¼æå±
- Pluggable Storage Enginesï¼åå¨å¼ææ¥å£ï¼MySQL åºå«äºå
¶ä»æ°æ®åºçéè¦ç¹ç¹å°±æ¯å
¶åå¨å¼æçæ¶ææ¨¡å¼æ¯æä»¶å¼çï¼åå¨å¼ææ¯åºäºè¡¨çï¼è䏿¯æ°æ®åºï¼
- åå¨å¼æ**çæ£çè´è´£äº MySQL 䏿°æ®çåå¨åæå**ï¼æå¡å¨éè¿ API ååå¨å¼æè¿è¡éä¿¡
- ä¸åçåå¨å¼æå
·æä¸åçåè½ï¼å
±ç¨ä¸ä¸ª Server å±ï¼å¯ä»¥æ ¹æ®å¼åçéè¦ï¼æ¥éååéçåå¨å¼æ
- 第åå±ï¼ç³»ç»æä»¶å±
- æ°æ®åå¨å±ï¼ä¸»è¦æ¯å°æ°æ®åå¨å¨æä»¶ç³»ç»ä¹ä¸ï¼å¹¶å®æä¸åå¨å¼æç交äº
- File Systemï¼æä»¶ç³»ç»ï¼ä¿åé
ç½®æä»¶ãæ°æ®æä»¶ãæ¥å¿æä»¶ãé误æä»¶ãäºè¿å¶æä»¶ç

***
### 建ç«è¿æ¥
#### è¿æ¥å¨
æ± åææ¯ï¼å¯¹äºè®¿é®æ°æ®åºæ¥è¯´ï¼å»ºç«è¿æ¥çä»£ä»·æ¯æ¯è¾æè´µçï¼å 为æ¯ä¸ªè¿æ¥å¯¹åºä¸ä¸ªç¨æ¥äº¤äºç线ç¨ï¼é¢ç¹çå建å
³éè¿æ¥æ¯è¾èè´¹èµæºï¼æå¿
è¦å»ºç«æ°æ®åºè¿æ¥æ± ï¼ä»¥æé«è®¿é®çæ§è½
è¿æ¥å»ºç« TCP 以åéè¦å**æééªè¯**ï¼éªè¯æååå¯ä»¥è¿è¡æ§è¡ SQLãå¦æè¿æ¶ç®¡çåè´¦å·å¯¹è¿ä¸ªç¨æ·çæéåäºä¿®æ¹ï¼ä¹ä¸ä¼å½±åå·²ç»åå¨è¿æ¥çæéï¼åªæåæ°å»ºçè¿æ¥æä¼ä½¿ç¨æ°çæé设置
MySQL æå¡å¨å¯ä»¥åæ¶åå¤ä¸ªå®¢æ·ç«¯è¿è¡äº¤äºï¼æä»¥è¦ä¿è¯æ¯ä¸ªè¿æ¥ä¼è¯çé离æ§ï¼äºå¡æºå¶é¨å详解ï¼
æ´ä½çæ§è¡æµç¨ï¼
***
#### æéä¿¡æ¯
grant è¯å¥ä¼åæ¶ä¿®æ¹æ°æ®è¡¨åå
åï¼å¤ææéçæ¶å使ç¨çæ¯å
åæ°æ®
flush privileges è¯å¥æ¬èº«ä¼ç¨æ°æ®è¡¨ï¼ç£çï¼çæ°æ®é建ä¸ä»½å
åæéæ°æ®ï¼æä»¥å¨æéæ°æ®å¯è½åå¨ä¸ä¸è´çæ
åµä¸ä½¿ç¨ï¼è¿ç§ä¸ä¸è´å¾å¾æ¯ç±äºç´æ¥ç¨ DML è¯å¥æä½ç³»ç»æé表导è´çï¼æä»¥å°½éä¸è¦ä½¿ç¨è¿ç±»è¯å¥

****
#### è¿æ¥ç¶æ
客æ·ç«¯å¦æé¿æ¶é´æ²¡ææä½ï¼è¿æ¥å¨å°±ä¼èªå¨æå¼ï¼æ¶é´æ¯ç±åæ° wait_timeout æ§å¶çï¼é»è®¤å¼æ¯ 8 å°æ¶ã妿å¨è¿æ¥è¢«æå¼ä¹åï¼å®¢æ·ç«¯**忬¡åé请æ±**çè¯ï¼å°±ä¼æ¶å°ä¸ä¸ªé误æéï¼`Lost connection to MySQL server during query`
æ°æ®åºéé¢ï¼é¿è¿æ¥æ¯æè¿æ¥æååï¼å¦æå®¢æ·ç«¯æç»æè¯·æ±ï¼åä¸ç´ä½¿ç¨åä¸ä¸ªè¿æ¥ï¼çè¿æ¥åæ¯ææ¯æ¬¡æ§è¡å®å¾å°çå æ¬¡æ¥è¯¢å°±æå¼è¿æ¥ï¼ä¸æ¬¡æ¥è¯¢åéæ°å»ºç«ä¸ä¸ª
为äºåå°è¿æ¥çåå»ºï¼æ¨è使ç¨é¿è¿æ¥ï¼ä½æ¯**è¿å¤çé¿è¿æ¥ä¼é æ OOM**ï¼è§£å³æ¹æ¡ï¼
* 宿æå¼é¿è¿æ¥ï¼ä½¿ç¨ä¸æ®µæ¶é´ï¼æè
ç¨åºéé¢å¤ææ§è¡è¿ä¸ä¸ªå ç¨å
åç大æ¥è¯¢åï¼æå¼è¿æ¥ï¼ä¹åè¦æ¥è¯¢åéè¿
```mysql
KILL CONNECTION id
```
* MySQL 5.7 çæ¬ï¼å¯ä»¥å¨æ¯æ¬¡æ§è¡ä¸ä¸ªæ¯è¾å¤§çæä½åï¼éè¿æ§è¡ mysql_reset_connection æ¥éæ°åå§åè¿æ¥èµæºï¼è¿ä¸ªè¿ç¨ä¸éè¦éè¿åéæ°åæééªè¯ï¼ä½æ¯ä¼å°è¿æ¥æ¢å¤å°åååå»ºå®æ¶çç¶æ
SHOW PROCESSLISTï¼æ¥çå½å MySQL å¨è¿è¡ç线ç¨ï¼å¯ä»¥å®æ¶å°æ¥ç SQL çæ§è¡æ
åµï¼å
¶ä¸ç Command åæ¾ç¤ºä¸º Sleep çè¿ä¸è¡ï¼å°±è¡¨ç¤ºç°å¨ç³»ç»é颿ä¸ä¸ªç©ºé²è¿æ¥

| åæ° | å«ä¹ |
| ------- | ------------------------------------------------------------ |
| ID | ç¨æ·ç»å½ mysql æ¶ç³»ç»åé
ç connection_idï¼å¯ä»¥ä½¿ç¨å½æ° connection_id() æ¥ç |
| User | æ¾ç¤ºå½åç¨æ·ï¼å¦æä¸æ¯ rootï¼è¿ä¸ªå½ä»¤å°±åªæ¾ç¤ºç¨æ·æéèå´ç sql è¯å¥ |
| Host | æ¾ç¤ºè¿ä¸ªè¯å¥æ¯ä»åªä¸ª ip çåªä¸ªç«¯å£ä¸åçï¼å¯ä»¥ç¨æ¥è·è¸ªåºç°é®é¢è¯å¥çç¨æ· |
| db | æ¾ç¤ºè¿ä¸ªè¿ç¨ç®åè¿æ¥çæ¯åªä¸ªæ°æ®åº |
| Command | æ¾ç¤ºå½åè¿æ¥çæ§è¡çå½ä»¤ï¼ä¸è¬åå¼ä¸ºä¼ç Sleepãæ¥è¯¢ Queryãè¿æ¥ Connect ç |
| Time | æ¾ç¤ºè¿ä¸ªç¶ææç»çæ¶é´ï¼å使¯ç§ |
| State | æ¾ç¤ºä½¿ç¨å½åè¿æ¥ç sql è¯å¥çç¶æï¼ä»¥æ¥è¯¢ä¸ºä¾ï¼éè¦ç»è¿ copying to tmp tableãsorting resultãsending dataçç¶ææå¯ä»¥å®æ |
| Info | æ¾ç¤ºæ§è¡ç sql è¯å¥ï¼æ¯å¤æé®é¢è¯å¥çä¸ä¸ªéè¦ä¾æ® |
**Sending data ç¶æ**表示 MySQL 线ç¨å¼å§è®¿é®æ°æ®è¡å¹¶æç»æè¿åç»å®¢æ·ç«¯ï¼èä¸ä»
ä»
åªæ¯è¿åç»å®¢æ·ç«¯ï¼æ¯å¤äºæ§è¡å¨è¿ç¨ä¸çä»»æé¶æ®µãç±äºå¨ Sending data ç¶æä¸ï¼MySQL 线ç¨éè¦å大éç£ç读åæä½ï¼æä»¥æ¯æ´ä¸ªæ¥è¯¢ä¸èæ¶æé¿çç¶æ
***
### æ§è¡æµç¨
#### æ¥è¯¢ç¼å
##### 工使µç¨
彿§è¡å®å
¨ç¸åç SQL è¯å¥çæ¶åï¼æå¡å¨å°±ä¼ç´æ¥ä»ç¼åä¸è¯»åç»æï¼å½æ°æ®è¢«ä¿®æ¹ï¼ä¹åçç¼åä¼å¤±æï¼ä¿®æ¹æ¯è¾é¢ç¹ç表ä¸éååæ¥è¯¢ç¼å
æ¥è¯¢è¿ç¨ï¼
1. 客æ·ç«¯åé䏿¡æ¥è¯¢ç»æå¡å¨
2. æå¡å¨å
伿£æ¥æ¥è¯¢ç¼åï¼å¦æå½ä¸äºç¼åï¼åç«å³è¿ååå¨å¨ç¼åä¸çç»æï¼ä¸è¬æ¯ K-V é®å¼å¯¹ï¼ï¼å¦åè¿å
¥ä¸ä¸é¶æ®µ
3. åæå¨è¿è¡ SQL åæï¼åç±ä¼åå¨çæå¯¹åºçæ§è¡è®¡å
4. æ§è¡å¨æ ¹æ®ä¼åå¨çæçæ§è¡è®¡åï¼è°ç¨åå¨å¼æç API æ¥æ§è¡æ¥è¯¢
5. å°ç»æè¿åç»å®¢æ·ç«¯
大夿°æ
åµä¸ä¸å»ºè®®ä½¿ç¨æ¥è¯¢ç¼åï¼å 为æ¥è¯¢ç¼åå¾å¾å¼å¤§äºå©
* æ¥è¯¢ç¼åç**失æé常é¢ç¹**ï¼åªè¦æå¯¹ä¸ä¸ªè¡¨çæ´æ°ï¼è¿ä¸ªè¡¨ä¸ææçæ¥è¯¢ç¼åé½ä¼è¢«æ¸
空ãå æ¤å¾å¯è½è´¹åå°æç»æåèµ·æ¥ï¼è¿æ²¡ä½¿ç¨å°±è¢«ä¸ä¸ªæ´æ°å
¨æ¸
空äºï¼å¯¹äºæ´æ°ååå¤§çæ°æ®åºæ¥è¯´ï¼æ¥è¯¢ç¼åçå½ä¸çä¼é常ä½
* é¤éä¸å¡å°±æ¯æä¸å¼ éæè¡¨ï¼å¾é¿æ¶é´æä¼æ´æ°ä¸æ¬¡ï¼æ¯å¦ä¸ä¸ªç³»ç»é
置表ï¼é£è¿å¼ 表ä¸çæ¥è¯¢æéåä½¿ç¨æ¥è¯¢ç¼å
***
##### ç¼åé
ç½®
1. æ¥çå½å MySQL æ°æ®åºæ¯å¦æ¯ææ¥è¯¢ç¼åï¼
```mysql
SHOW VARIABLES LIKE 'have_query_cache'; -- YES
```
2. æ¥çå½å MySQL æ¯å¦å¼å¯äºæ¥è¯¢ç¼åï¼
```mysql
SHOW VARIABLES LIKE 'query_cache_type'; -- OFF
```
åæ°è¯´æï¼
* OFF æ 0ï¼æ¥è¯¢ç¼ååè½å
³é
* ON æ 1ï¼æ¥è¯¢ç¼ååè½æå¼ï¼æ¥è¯¢ç»æç¬¦åç¼åæ¡ä»¶å³ä¼ç¼åï¼å¦åä¸äºç¼åï¼å¯ä»¥æ¾å¼æå® SQL_NO_CACHE ä¸äºç¼å
* DEMAND æ 2ï¼æ¥è¯¢ç¼ååè½æéè¿è¡ï¼æ¾å¼æå® SQL_CACHE ç SELECT è¯å¥æç¼åï¼å
¶å®ä¸äºç¼å
```mysql
SELECT SQL_CACHE id, name FROM customer; -- SQL_CACHE:æ¥è¯¢ç»æå¯ç¼å
SELECT SQL_NO_CACHE id, name FROM customer;-- SQL_NO_CACHE:ä¸ä½¿ç¨æ¥è¯¢ç¼å
```
3. æ¥çæ¥è¯¢ç¼åçå ç¨å¤§å°ï¼
```mysql
SHOW VARIABLES LIKE 'query_cache_size';-- å使¯åè 1048576 / 1024 = 1024 = 1KB
```
4. æ¥çæ¥è¯¢ç¼åçç¶æåéï¼
```mysql
SHOW STATUS LIKE 'Qcache%';
```
| åæ° | å«ä¹ |
| ----------------------- | ------------------------------------------------------------ |
| Qcache_free_blocks | æ¥è¯¢ç¼åä¸çå¯ç¨å
ååæ° |
| Qcache_free_memory | æ¥è¯¢ç¼åçå¯ç¨å
åé |
| Qcache_hits | æ¥è¯¢ç¼åå½ä¸æ° |
| Qcache_inserts | æ·»å å°æ¥è¯¢ç¼åçæ¥è¯¢æ° |
| Qcache_lowmen_prunes | ç±äºå
åä¸è¶³è仿¥è¯¢ç¼åä¸å é¤çæ¥è¯¢æ° |
| Qcache_not_cached | éç¼åæ¥è¯¢çæ°éï¼ç±äº query_cache_type è®¾ç½®èæ æ³ç¼åææªç¼åï¼ |
| Qcache_queries_in_cache | æ¥è¯¢ç¼å䏿³¨åçæ¥è¯¢æ° |
| Qcache_total_blocks | æ¥è¯¢ç¼åä¸çåæ»æ° |
5. é
ç½® my.cnfï¼
```sh
sudo chmod 666 /etc/mysql/my.cnf
vim my.cnf
# mysqldä¸é
ç½®ç¼å
query_cache_type=1
```
é坿塿¢å¯çæï¼æ§è¡ SQL è¯å¥è¿è¡éªè¯ ï¼æ§è¡ä¸æ¡æ¯è¾èæ¶ç SQL è¯å¥ï¼ç¶åå夿§è¡å æ¬¡ï¼æ¥çåé¢å æ¬¡çæ§è¡æ¶é´ï¼è·åéè¿æ¥çæ¥è¯¢ç¼åçç¼åå½ä¸æ°ï¼æ¥å¤å®æ¯å¦èµ°æ¥è¯¢ç¼å
***
##### ç¼å失æ
æ¥è¯¢ç¼å失æçæ
åµï¼
* SQL è¯å¥ä¸ä¸è´ï¼è¦æ³å½ä¸æ¥è¯¢ç¼åï¼æ¥è¯¢ç SQL è¯å¥å¿
é¡»ä¸è´ï¼å 为**ç¼åä¸ key æ¯æ¥è¯¢çè¯å¥**ï¼value æ¯æ¥è¯¢ç»æ
```mysql
select count(*) from tb_item;
Select count(*) from tb_item; -- ä¸èµ°ç¼åï¼é¦åæ¯ä¸ä¸è´
```
* 彿¥è¯¢è¯å¥ä¸æä¸äºä¸ç¡®å®æ¥è¯¢æ¶ï¼åä¸ä¼ç¼åï¼æ¯å¦ï¼now()ãcurrent_date()ãcurdate()ãcurtime()ãrand()ãuuid()ãuser()ãdatabase()
```mysql
SELECT * FROM tb_item WHERE updatetime < NOW() LIMIT 1;
SELECT USER();
SELECT DATABASE();
```
* ä¸ä½¿ç¨ä»»ä½è¡¨æ¥è¯¢è¯å¥ï¼
```mysql
SELECT 'A';
```
* æ¥è¯¢ mysqlãinformation_schemaãperformance_schema çç³»ç»è¡¨æ¶ï¼ä¸èµ°æ¥è¯¢ç¼åï¼
```mysql
SELECT * FROM information_schema.engines;
```
* å¨**è·¨åå¨å¼æ**çåå¨è¿ç¨ã触å卿åå¨å½æ°ç主ä½å
æ§è¡çæ¥è¯¢ï¼ç¼å失æ
* å¦æè¡¨æ´æ¹ï¼å使ç¨è¯¥è¡¨ç**ææé«éç¼åæ¥è¯¢é½å°åä¸ºæ æ**å¹¶ä»é«éç¼åä¸å é¤ï¼å
æ¬ä½¿ç¨ MERGE æ å°å°å·²æ´æ¹è¡¨çè¡¨çæ¥è¯¢ï¼æ¯å¦ï¼INSERTãUPDATEãDELETEãALTER TABLEãDROP TABLEãDROP DATABASE
***
#### åæå¨
没æå½ä¸æ¥è¯¢ç¼åï¼å°±å¼å§äº SQL ççæ£æ§è¡ï¼åæå¨ä¼å¯¹ SQL è¯å¥åè§£æ
```sql
SELECT * FROM t WHERE id = 1;
```
è§£æå¨ï¼å¤çè¯æ³åè§£ææ¥è¯¢ï¼çæä¸è¯¾å¯¹åºçè§£ææ
* å
å**è¯æ³åæ**ï¼è¾å
¥çæ¯ç±å¤ä¸ªå符串åç©ºæ ¼ç»æç䏿¡ SQL è¯å¥ï¼MySQL éè¦è¯å«åºéé¢çå符串å嫿¯ä»ä¹ä»£è¡¨ä»ä¹ãä»è¾å
¥ç select è¿ä¸ªå
³é®åè¯å«åºæ¥è¿æ¯ä¸ä¸ªæ¥è¯¢è¯å¥ï¼æå符串 t è¯å«æ 表å tï¼æå符串 id è¯å«æå id
* ç¶åå**è¯æ³åæ**ï¼æ ¹æ®è¯æ³åæçç»æï¼è¯æ³åæå¨ä¼æ ¹æ®è¯æ³è§åï¼å¤æä½ è¾å
¥çè¿ä¸ª SQL è¯å¥æ¯å¦æ»¡è¶³ MySQL è¯æ³ã妿è¯å¥ä¸å¯¹ï¼å°±ä¼æ¶å° `You have an error in your SQL syntax` çé误æé
é¢å¤çå¨ï¼è¿ä¸æ¥æ£æ¥è§£ææ çåæ³æ§ï¼æ¯å¦æ°æ®è¡¨åæ°æ®åæ¯å¦åå¨ãå«åæ¯å¦ææ§ä¹ç
***
#### ä¼åå¨
##### ææ¬åæ
ä¼å卿¯å¨è¡¨é颿å¤ä¸ªç´¢å¼çæ¶åï¼å³å®ä½¿ç¨åªä¸ªç´¢å¼ï¼æè
å¨ä¸ä¸ªè¯å¥æå¤è¡¨å
³èï¼joinï¼çæ¶åï¼å³å®å个表çè¿æ¥é¡ºåº
* æ ¹æ®æç´¢æ¡ä»¶æ¾åºææå¯è½ç使ç¨çç´¢å¼
* ææ¬åæï¼æ§è¡ææ¬ç± I/O ææ¬å CPU ææ¬ç»æï¼è®¡ç®å
¨è¡¨æ«æå使ç¨ä¸åç´¢å¼æ§è¡ SQL ç代价
* æ¾å°ä¸ä¸ªæä¼çæ§è¡æ¹æ¡ï¼ç¨æå°ç代价廿§è¡è¯å¥
卿°æ®åºéé¢ï¼æ«æè¡æ°æ¯å½±åæ§è¡ä»£ä»·çå ç´ ä¹ä¸ï¼æ«æçè¡æ°è¶å°æå³ç访é®ç£ççæ¬¡æ°è¶å°ï¼æ¶èç CPU èµæºè¶å°ï¼ä¼åå¨è¿ä¼ç»åæ¯å¦ä½¿ç¨ä¸´æ¶è¡¨ãæ¯å¦æåºçå ç´ è¿è¡ç»¼å夿
***
##### ç»è®¡æ°æ®
MySQL ä¸ä¿åç两ç§ç»è®¡æ°æ®ï¼
* innodb_table_stats åå¨äºè¡¨çç»è®¡æ°æ®ï¼æ¯ä¸æ¡è®°å½å¯¹åºçä¸ä¸ªè¡¨çç»è®¡æ°æ®
* innodb_index_stats åå¨äºç´¢å¼çç»è®¡æ°æ®ï¼æ¯ä¸æ¡è®°å½å¯¹åºçä¸ä¸ªç´¢å¼çä¸ä¸ªç»è®¡é¡¹çæ°æ®
MySQL å¨çæ£æ§è¡è¯å¥ä¹åï¼å¹¶ä¸è½ç²¾ç¡®å°ç¥é满足æ¡ä»¶çè®°å½æå¤å°æ¡ï¼åªè½æ ¹æ®ç»è®¡ä¿¡æ¯æ¥ä¼°ç®è®°å½ï¼ç»è®¡ä¿¡æ¯å°±æ¯ç´¢å¼çåºå度ï¼ä¸ä¸ªç´¢å¼ä¸ä¸åçå¼ç个æ°ï¼æ¯å¦æ§å«åªè½æ¯ç·å¥³ï¼å°±æ¯ 2 ï¼ï¼ç§°ä¹ä¸ºåºæ°ï¼cardinalityï¼ï¼**åºæ°è¶å¤§è¯´æåºå度è¶å¥½**
éè¿**éæ ·ç»è®¡**æ¥è·ååºæ°ï¼InnoDB é»è®¤ä¼éæ© N ä¸ªæ°æ®é¡µï¼ç»è®¡è¿äºé¡µé¢ä¸çä¸åå¼å¾å°ä¸ä¸ªå¹³åå¼ï¼ç¶åä¹ä»¥è¿ä¸ªç´¢å¼ç页颿°ï¼å°±å¾å°äºè¿ä¸ªç´¢å¼çåºæ°
å¨ MySQL ä¸ï¼æä¸¤ç§åå¨ç»è®¡æ°æ®çæ¹å¼ï¼å¯ä»¥éè¿è®¾ç½®åæ° `innodb_stats_persistent` ç弿¥éæ©ï¼
* ONï¼è¡¨ç¤ºç»è®¡ä¿¡æ¯ä¼æä¹
ååå¨ï¼é»è®¤ï¼ï¼éæ ·é¡µæ° N é»è®¤ä¸º 20ï¼å¯ä»¥éè¿ `innodb_stats_persistent_sample_pages` æå®ï¼é¡µæ°è¶å¤ç»è®¡çæ°æ®è¶åç¡®ï¼ä½æ¶èçèµæºæ´å¤§
* OFFï¼è¡¨ç¤ºç»è®¡ä¿¡æ¯åªåå¨å¨å
åï¼éæ ·é¡µæ° N é»è®¤ä¸º 8ï¼ä¹å¯ä»¥éè¿ç³»ç»åé设置ï¼ä¸æ¨èï¼æ¯æ¬¡éæ°è®¡ç®æµªè´¹èµæºï¼
æ°æ®è¡¨æ¯ä¼æç»æ´æ°çï¼ä¸¤ç§ç»è®¡ä¿¡æ¯çæ´æ°æ¹å¼ï¼
* 设置 `innodb_stats_auto_recalc` 为 1ï¼å½åçåå¨çè®°å½æ°éè¶
è¿è¡¨å¤§å°ç 10% æ¶ï¼èªå¨è§¦åéæ°è®¡ç®ï¼ä¸è¿æ¯**弿¥è¿è¡**
* è°ç¨ `ANALYZE TABLE t` æå¨æ´æ°ç»è®¡ä¿¡æ¯ï¼åªå¯¹ä¿¡æ¯å**éæ°ç»è®¡**ï¼ä¸æ¯é建表ï¼ï¼æ²¡æä¿®æ¹æ°æ®ï¼è¿ä¸ªè¿ç¨ä¸å äº MDL 读é并䏿¯åæ¥è¿è¡ï¼æä»¥ä¼ææ¶é»å¡ç³»ç»
**EXPLAIN æ§è¡è®¡åå¨ä¼åå¨é¶æ®µçæ**ï¼å¦æ explain çç»æé¢ä¼°ç rows å¼è·å®é
æ
åµå·®è·æ¯è¾å¤§ï¼å¯ä»¥æ§è¡ analyze å½ä»¤éæ°ä¿®æ£ä¿¡æ¯
***
##### ééç´¢å¼
éæ ·ç»è®¡æ¬èº«æ¯ä¼°ç®æ°æ®ï¼æè
SQL è¯å¥ä¸çåæ®µéæ©æé®é¢æ¶ï¼å¯è½å¯¼è´ MySQL 没æéæ©æ£ç¡®çæ§è¡ç´¢å¼
è§£å³æ¹æ³ï¼
* éç¨ force index 强è¡éæ©ä¸ä¸ªç´¢å¼
```sql
SELECT * FROM user FORCE INDEX(name) WHERE NAME='seazean';
```
* å¯ä»¥èèä¿®æ¹ SQL è¯å¥ï¼å¼å¯¼ MySQL ä½¿ç¨ææçç´¢å¼
* æ°å»ºä¸ä¸ªæ´åéçç´¢å¼ï¼æ¥æä¾ç»ä¼åå¨åéæ©ï¼æå æè¯¯ç¨çç´¢å¼
***
#### æ§è¡å¨
å¼å§æ§è¡çæ¶åï¼è¦å
夿ä¸ä¸å½åè¿æ¥å¯¹è¡¨ææ²¡æ**æ§è¡æ¥è¯¢çæé**ï¼å¦ææ²¡æå°±ä¼è¿å没ææéçé误ï¼å¨å·¥ç¨å®ç°ä¸ï¼å¦æå½ä¸æ¥è¯¢ç¼åï¼ä¼å¨æ¥è¯¢ç¼åè¿åç»æçæ¶åï¼åæééªè¯ã妿ææéï¼å°±æå¼è¡¨ç»§ç»æ§è¡ï¼æ§è¡å¨å°±ä¼æ ¹æ®è¡¨ç弿å®ä¹ï¼å»ä½¿ç¨è¿ä¸ªå¼ææä¾çæ¥å£
***
#### 弿å±
Server å±ååå¨å¼æå±çäº¤äºæ¯**以记å½ä¸ºåä½ç**ï¼åå¨å¼æä¼å°åæ¡è®°å½è¿åç» Server å±åè¿ä¸æ¥å¤çï¼å¹¶ä¸æ¯ç´æ¥è¿åææçè®°å½
工使µç¨ï¼
* é¦å
æ ¹æ®äºçº§ç´¢å¼éæ©æ«æèå´ï¼è·åç¬¬ä¸æ¡ç¬¦åäºçº§ç´¢å¼æ¡ä»¶çè®°å½ï¼è¿è¡å表æ¥è¯¢ï¼å°èç°ç´¢å¼çè®°å½è¿å Server å±ï¼ç± Server å¤æè®°å½æ¯å¦ç¬¦åè¦æ±
* ç¶åå¨äºçº§ç´¢å¼ä¸ç»§ç»æ«æä¸ä¸ä¸ªç¬¦åæ¡ä»¶çè®°å½
æ¨èé
读ï¼https://mp.weixin.qq.com/s/YZ-LckObephrP1f15mzHpA
***
### ç»æ¢æµç¨
#### ç»æ¢è¯å¥
ç»æ¢çº¿ç¨ä¸æ£å¨æ§è¡çè¯å¥ï¼
```mysql
KILL QUERY thread_id
```
KILL 䏿¯é©¬ä¸ç»æ¢çææï¼èæ¯åè¯æ§è¡çº¿ç¨è¿æ¡è¯å¥å·²ç»ä¸éè¦ç»§ç»æ§è¡ï¼å¯ä»¥å¼å§æ§è¡åæ¢çé»è¾ï¼ç±»ä¼¼äºææï¼ãå 为对表åå¢å æ¹æ¥æä½ï¼ä¼å¨è¡¨ä¸å MDL 读éï¼å¦æçº¿ç¨è¢« KILL æ¶å°±ç´æ¥ç»æ¢ï¼é£è¿ä¸ª MDL 读é就没æºä¼è¢«éæ¾äº
å½ä»¤ `KILL QUERYthread_id_A` çæ§è¡æµç¨ï¼
* æ session A çè¿è¡ç¶ææ¹æ THD::KILL_QUERYï¼å°åé killed èµå¼ä¸º THD::KILL_QUERYï¼
* ç» session A çæ§è¡çº¿ç¨åä¸ä¸ªä¿¡å·ï¼è®© session A æ¥å¤çè¿ä¸ª THD::KILL_QUERY ç¶æ
ä¼è¯å¤äºçå¾
ç¶æï¼éé»å¡ï¼ï¼å¿
须满足æ¯ä¸ä¸ªå¯ä»¥è¢«å¤éççå¾
ï¼å¿
é¡»ææºä¼å»**å¤æçº¿ç¨çç¶æ**ï¼å¦æä¸æ»¡è¶³å°±ä¼é æ KILL 失败
å
¸ååºæ¯ï¼innodb_thread_concurrency 为 2ï¼ä»£è¡¨å¹¶å线ç¨ä¸éæ°è®¾ç½®ä¸º 2
* session A æ§è¡äºå¡ï¼session B æ§è¡äºå¡ï¼è¾¾å°çº¿ç¨ä¸éï¼æ¤æ¶ session C æ§è¡äºå¡ä¼é»å¡çå¾
ï¼session D æ§è¡ kill query C æ æ
* C çé»è¾æ¯æ¯ 10 毫ç§å¤ææ¯å¦å¯ä»¥è¿å
¥ InnoDB æ§è¡ï¼å¦æä¸è¡å°±è°ç¨ nanosleep 彿°è¿å
¥ sleep ç¶æï¼æ²¡æå»å¤æçº¿ç¨ç¶æ
è¡¥å
ï¼æ§è¡ Ctrl+C çæ¶åï¼æ¯ MySQL 客æ·ç«¯å¦å¤å¯å¨ä¸ä¸ªè¿æ¥ï¼ç¶ååéä¸ä¸ª KILL QUERY å½ä»¤
***
#### ç»æ¢è¿æ¥
æå¼çº¿ç¨çè¿æ¥ï¼
```mysql
KILL CONNECTION id
```
æå¼è¿æ¥åæ§è¡ SHOW PROCESSLIST å½ä»¤ï¼å¦æè¿æ¡è¯å¥ç Command åæ¾ç¤º Killedï¼ä»£è¡¨çº¿ç¨çç¶ææ¯ KILL_CONNECTIONï¼è¯´æè¿ä¸ªçº¿ç¨æè¯å¥æ£å¨æ§è¡ï¼å½åç¶ææ¯åæ¢è¯å¥æ§è¡ä¸ï¼ç»æ¢é»è¾èæ¶è¾é¿
* è¶
大äºå¡æ§è¡æé´è¢« KILLï¼è¿æ¶åæ»æä½éè¦å¯¹äºå¡æ§è¡æé´çæçæææ°æ°æ®çæ¬ååæ¶æä½ï¼èæ¶å¾é¿
* 大æ¥è¯¢åæ»ï¼å¦ææ¥è¯¢è¿ç¨ä¸çæäºæ¯è¾å¤§çä¸´æ¶æä»¶ï¼å é¤ä¸´æ¶æä»¶å¯è½éè¦çå¾
IO èµæºï¼å¯¼è´èæ¶è¾é¿
* DDL å½ä»¤æ§è¡å°æåé¶æ®µè¢« KILLï¼éè¦å é¤ä¸é´è¿ç¨çä¸´æ¶æä»¶ï¼ä¹å¯è½å IO èµæºå½±åèæ¶è¾ä¹
æ»ç»ï¼KILL CONNECTION æ¬è´¨ä¸åªæ¯æå®¢æ·ç«¯ç SQL è¿æ¥æå¼ï¼åé¢çç»æ¢æµç¨è¿æ¯è¦èµ° KILL QUERY
ä¸ä¸ªäºå¡è¢« KILL ä¹åï¼æç»å¤äºåæ»ç¶æï¼ä¸åºè¯¥å¼ºè¡é坿´ä¸ª MySQL è¿ç¨ï¼åºè¯¥çå¾
äºå¡èªå·±æ§è¡å®æï¼å 为éå¯åä¾ç¶ç»§ç»ååæ»æä½çé»è¾
***
### 常ç¨å·¥å
·
#### mysql
mysql 䏿¯æ mysql æå¡ï¼èæ¯æ mysql ç客æ·ç«¯å·¥å
·
```sh
mysql [options] [database]
```
* -u --user=nameï¼æå®ç¨æ·å
* -p --password[=name]ï¼æå®å¯ç
* -h --host=nameï¼æå®æå¡å¨IPæåå
* -P --port=#ï¼æå®è¿æ¥ç«¯å£
* -e --execute=nameï¼æ§è¡SQLè¯å¥å¹¶éåºï¼å¨æ§å¶å°æ§è¡SQLè¯å¥ï¼èä¸ç¨è¿æ¥å°æ°æ®åºæ§è¡
示ä¾ï¼
```sh
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -uroot -p2143 db01 -e "select * from tb_book";
```
***
#### admin
mysqladmin æ¯ä¸ä¸ªæ§è¡ç®¡çæä½ç客æ·ç«¯ç¨åºï¼ç¨æ¥æ£æ¥æå¡å¨çé
ç½®åå½åç¶æãå建并å 餿°æ®åºç
éè¿ `mysqladmin --help` æä»¤æ¥çå¸®å©ææ¡£
```sh
mysqladmin -uroot -p2143 create 'test01';
```
***
#### binlog
æå¡å¨çæçæ¥å¿æä»¶ä»¥äºè¿å¶æ ¼å¼ä¿åï¼å¦æéè¦æ£æ¥è¿äºææ¬ï¼å°±è¦ä½¿ç¨ mysqlbinlog æ¥å¿ç®¡çå·¥å
·
```sh
mysqlbinlog [options] log-files1 log-files2 ...
```
* -d --database=nameï¼æå®æ°æ®åºåç§°ï¼åªååºæå®çæ°æ®åºç¸å
³æä½
* -o --offset=#ï¼å¿½ç¥ææ¥å¿ä¸çå n è¡å½ä»¤ã
* -r --result-file=nameï¼å°è¾åºçææ¬æ ¼å¼æ¥å¿è¾åºå°æå®æä»¶ã
* -s --short-formï¼æ¾ç¤ºç®åæ ¼å¼ï¼çç¥æä¸äºä¿¡æ¯ã
* --start-datatime=date1 --stop-datetime=date2ï¼æå®æ¥æé´éå
çæææ¥å¿
* --start-position=pos1 --stop-position=pos2ï¼æå®ä½ç½®é´éå
çæææ¥å¿
***
#### dump
##### å½ä»¤ä»ç»
mysqldump 客æ·ç«¯å·¥å
·ç¨æ¥å¤ä»½æ°æ®åºæå¨ä¸åæ°æ®åºä¹é´è¿è¡æ°æ®è¿ç§»ï¼å¤ä»½å
容å
å«å建表ï¼åæå
¥è¡¨ç SQL è¯å¥
```sh
mysqldump [options] db_name [tables]
mysqldump [options] --database/-B db1 [db2 db3...]
mysqldump [options] --all-databases/-A
```
è¿æ¥é项ï¼
* -u --user=nameï¼æå®ç¨æ·å
* -p --password[=name]ï¼æå®å¯ç
* -h --host=nameï¼æå®æå¡å¨ IP æåå
* -P --port=#ï¼æå®è¿æ¥ç«¯å£
è¾åºå
容é项ï¼
* --add-drop-databaseï¼å¨æ¯ä¸ªæ°æ®åºå建è¯å¥åå ä¸ Drop database è¯å¥
* --add-drop-tableï¼å¨æ¯ä¸ªè¡¨å建è¯å¥åå ä¸ Drop table è¯å¥ , é»è®¤å¼å¯ï¼ä¸å¼å¯ (--skip-add-drop-table)
* -n --no-create-dbï¼ä¸å
嫿°æ®åºçå建è¯å¥
* -t --no-create-infoï¼ä¸å
嫿°æ®è¡¨çå建è¯å¥
* -d --no-dataï¼ä¸å
嫿°æ®
* -T, --tab=nameï¼èªå¨çæä¸¤ä¸ªæä»¶ï¼ä¸ä¸ª .sql æä»¶ï¼åå»ºè¡¨ç»æçè¯å¥ï¼ä¸ä¸ª .txt æä»¶ï¼æ°æ®æä»¶ï¼ç¸å½äº select into outfile
示ä¾ï¼
```sh
mysqldump -uroot -p2143 db01 tb_book --add-drop-database --add-drop-table > a
mysqldump -uroot -p2143 -T /tmp test city
```
***
##### æ°æ®å¤ä»½
å½ä»¤è¡æ¹å¼ï¼
* å¤ä»½å½ä»¤ï¼mysqldump -u root -p æ°æ®åºåç§° > æä»¶ä¿åè·¯å¾
* æ¢å¤
1. ç»å½MySQLæ°æ®åºï¼`mysql -u root p`
2. å é¤å·²ç»å¤ä»½çæ°æ®åº
3. éæ°å建ä¸å¤ä»½æ°æ®åºåç§°ç¸åçæ°æ®åº
4. 使ç¨è¯¥æ°æ®åº
5. 导å
¥æä»¶æ§è¡ï¼`source å¤ä»½æä»¶å
¨è·¯å¾`
æ´å¤æ¹å¼åèï¼https://time.geekbang.org/column/article/81925
å¾å½¢åçé¢ï¼
* å¤ä»½

* æ¢å¤

***
#### import
mysqlimport æ¯å®¢æ·ç«¯æ°æ®å¯¼å
¥å·¥å
·ï¼ç¨æ¥å¯¼å
¥mysqldump å -T åæ°å导åºçææ¬æä»¶
```sh
mysqlimport [options] db_name textfile1 [textfile2...]
```
示ä¾ï¼
```sh
mysqlimport -uroot -p2143 test /tmp/city.txt
```
导å
¥ sql æä»¶ï¼å¯ä»¥ä½¿ç¨ MySQL ä¸ç source æä»¤ :
```mysql
source æä»¶å
¨è·¯å¾
```
***
#### show
mysqlshow 客æ·ç«¯å¯¹è±¡æ¥æ¾å·¥å
·ï¼ç¨æ¥å¾å¿«å°æ¥æ¾åå¨åªäºæ°æ®åºãæ°æ®åºä¸ç表ã表ä¸çåæè
ç´¢å¼
```sh
mysqlshow [options] [db_name [table_name [col_name]]]
```
* --countï¼æ¾ç¤ºæ°æ®åºå表çç»è®¡ä¿¡æ¯ï¼æ°æ®åºï¼è¡¨ åå¯ä»¥ä¸æå®ï¼
* -iï¼æ¾ç¤ºæå®æ°æ®åºæè
æå®è¡¨çç¶æä¿¡æ¯
示ä¾ï¼
```sh
#æ¥è¯¢æ¯ä¸ªæ°æ®åºçè¡¨çæ°éå表ä¸è®°å½çæ°é
mysqlshow -uroot -p1234 --count
#æ¥è¯¢teståºä¸æ¯ä¸ªè¡¨ä¸çåæ®µä¹¦ï¼åè¡æ°
mysqlshow -uroot -p1234 test --count
#æ¥è¯¢teståºä¸book表çè¯¦ç»æ
åµ
mysqlshow -uroot -p1234 test book --count
```
****
## å表æä½
### SQL
- SQL
- Structured Query Languageï¼ç»æåæ¥è¯¢è¯è¨
- å®ä¹äºæä½ææå
³ç³»åæ°æ®åºçè§åï¼æ¯ç§æ°æ®åºæä½çæ¹å¼å¯è½ä¼åå¨ä¸ä¸æ ·çå°æ¹ï¼ç§°ä¸ºâæ¹è¨â
- SQL éç¨è¯æ³
- SQL è¯å¥å¯ä»¥åè¡æå¤è¡ä¹¦åï¼ä»¥**åå·ç»å°¾**ã
- å¯ä½¿ç¨ç©ºæ ¼åç¼©è¿æ¥å¢å¼ºè¯å¥çå¯è¯»æ§ã
- MySQL æ°æ®åºç SQL è¯å¥ä¸åºå大å°åï¼**å
³é®å建议使ç¨å¤§å**ã
- æ°æ®åºç注éï¼
- åè¡æ³¨éï¼-- 注éå
容 #注éå
容ï¼MySQL ç¹æï¼
- å¤è¡æ³¨éï¼/* 注éå
容 */
- SQL åç±»
- DDLï¼Data Definition Languageï¼æ°æ®å®ä¹è¯è¨
- ç¨æ¥å®ä¹æ°æ®åºå¯¹è±¡ï¼æ°æ®åºï¼è¡¨ï¼åçãå
³é®åï¼createãdrop,ãalter ç
- DMLï¼Data Manipulation Languageï¼æ°æ®æä½è¯è¨
- ç¨æ¥å¯¹æ°æ®åºä¸è¡¨çæ°æ®è¿è¡å¢å æ¹ãå
³é®åï¼insertãdeleteãupdate ç
- DQLï¼Data Query Languageï¼æ°æ®æ¥è¯¢è¯è¨
- ç¨æ¥æ¥è¯¢æ°æ®åºä¸è¡¨çè®°å½(æ°æ®)ãå
³é®åï¼selectãwhere ç
- DCLï¼Data Control Languageï¼æ°æ®æ§å¶è¯è¨
- ç¨æ¥å®ä¹æ°æ®åºçè®¿é®æéåå®å
¨çº§å«ï¼ååå»ºç¨æ·ãå
³é®åï¼grantï¼ revokeç

***
### DDL
#### æ°æ®åº
* R(Retrieve)ï¼æ¥è¯¢
* æ¥è¯¢æææ°æ®åºï¼
```mysql
SHOW DATABASES;
```
* æ¥è¯¢æä¸ªæ°æ®åºçå建è¯å¥
```sql
SHOW CREATE DATABASE æ°æ®åºåç§°; -- æ åè¯æ³
SHOW CREATE DATABASE mysql; -- æ¥çmysqlæ°æ®åºçåå»ºæ ¼å¼
```
* C(Create)ï¼å建
* åå»ºæ°æ®åº
```mysql
CREATE DATABASE æ°æ®åºåç§°;-- æ åè¯æ³
CREATE DATABASE db1; -- å建db1æ°æ®åº
```
* åå»ºæ°æ®åºï¼å¤æï¼å¦æä¸åå¨åå建ï¼
```mysql
CREATE DATABASE IF NOT EXISTS æ°æ®åºåç§°;
```
* åå»ºæ°æ®åºï¼å¹¶æå®å符é
```mysql
CREATE DATABASE æ°æ®åºåç§° CHARACTER SET å符éåç§°;
```
* ä¾å¦ï¼å建db4æ°æ®åºã妿ä¸åå¨ååå»ºï¼æå®å符é为gbk
```mysql
-- å建db4æ°æ®åºã妿ä¸åå¨ååå»ºï¼æå®å符é为gbk
CREATE DATABASE IF NOT EXISTS db4 CHARACTER SET gbk;
-- æ¥çdb4æ°æ®åºçå符é
SHOW CREATE DATABASE db4;
```
* U(Update)ï¼ä¿®æ¹
* ä¿®æ¹æ°æ®åºçå符é
```mysql
ALTER DATABASE æ°æ®åºåç§° CHARACTER SET å符éåç§°;
```
* 常ç¨å符éï¼
```mysql
--æ¥è¯¢æææ¯æçå符é
SHOW CHARSET;
--æ¥çæææ¯æçæ ¡å¯¹è§å
SHOW COLLATION;
-- å符é: utf8,latinI,GBK,,GBKæ¯utf8çåé
-- æ ¡å¯¹è§å: ci 大å°å®ä¸ææï¼csæbin大å°åææ
```
* D(Delete)ï¼å é¤
* å 餿°æ®åºï¼
```mysql
DROP DATABASE æ°æ®åºåç§°;
```
* å 餿°æ®åº(夿ï¼å¦æåå¨åå é¤)ï¼
```mysql
DROP DATABASE IF EXISTS æ°æ®åºåç§°;
```
* ä½¿ç¨æ°æ®åºï¼
* æ¥è¯¢å½åæ£å¨ä½¿ç¨çæ°æ®åºåç§°
```mysql
SELECT DATABASE();
```
* ä½¿ç¨æ°æ®åº
```mysql
USE æ°æ®åºåç§°ï¼ -- æ åè¯æ³
USE db4; -- 使ç¨db4æ°æ®åº
```
***
#### æ°æ®è¡¨
- R(Retrieve)ï¼æ¥è¯¢
- æ¥è¯¢æ°æ®åºä¸ææçæ°æ®è¡¨
```mysql
USE mysql;-- 使ç¨mysqlæ°æ®åº
SHOW TABLES;-- æ¥è¯¢åºä¸ææç表
```
- æ¥è¯¢è¡¨ç»æ
```mysql
DESC 表å;
```
- æ¥è¯¢è¡¨å符é
```mysql
SHOW TABLE STATUS FROM åºå LIKE '表å';
```
- C(Create)ï¼å建
- åå»ºæ°æ®è¡¨
```mysql
CREATE TABLE 表å(
åå1 æ°æ®ç±»å1,
åå2 æ°æ®ç±»å2,
....
åån æ°æ®ç±»ån
);
-- 注æï¼æåä¸åï¼ä¸éè¦å éå·
```
- å¤å¶è¡¨
```mysql
CREATE TABLE 表å LIKE 被å¤å¶ç表å; -- æ åè¯æ³
CREATE TABLE product2 LIKE product; -- å¤å¶product表å°product2表
```
- æ°æ®ç±»å
| æ°æ®ç±»å | 说æ |
| --------- | ------------------------------------------------------------ |
| INT | æ´æ°ç±»å |
| DOUBLE | å°æ°ç±»å |
| DATE | æ¥æï¼åªå
å«å¹´ææ¥ï¼yyyy-MM-dd |
| DATETIME | æ¥æï¼å
å«å¹´ææ¥æ¶åç§ï¼yyyy-MM-dd HH:mm:ss |
| TIMESTAMP | æ¶é´æ³ç±»åï¼å
å«å¹´ææ¥æ¶åç§ï¼yyyy-MM-dd HH:mm:ss
妿ä¸ç»è¿ä¸ªå段èµå¼æèµå¼ä¸º NULLï¼åé»è®¤ä½¿ç¨å½åçç³»ç»æ¶é´ |
| CHAR | å符串ï¼å®é¿ç±»å |
| VARCHAR | å符串ï¼**åé¿ç±»å**
name varchar(20) 代表å§åæå¤§ 20 个å符ï¼zhangsan 8 个å符ï¼å¼ ä¸ 2 个å符 |
`INT(n)`ï¼n ä»£è¡¨ä½æ°
* 3ï¼intï¼9ï¼æ¾ç¤ºç»æä¸º 000000010
* 3ï¼intï¼3ï¼æ¾ç¤ºç»æä¸º 010
`varchar(n)`ï¼n è¡¨ç¤ºçæ¯å符æ°
- ä¾å¦ï¼
```mysql
-- 使ç¨db3æ°æ®åº
USE db3;
-- å建ä¸ä¸ªproductåå表
CREATE TABLE product(
id INT, -- ååç¼å·
NAME VARCHAR(30), -- åååç§°
price DOUBLE, -- ååä»·æ ¼
stock INT, -- åååºå
insert_time DATE -- 䏿¶æ¶é´
);
```
â
- U(Update)ï¼ä¿®æ¹
- ä¿®æ¹è¡¨å
```mysql
ALTER TABLE 表å RENAME TO æ°ç表å;
```
- ä¿®æ¹è¡¨çå符é
```mysql
ALTER TABLE 表å CHARACTER SET å符éåç§°;
```
- æ·»å ä¸å
```mysql
ALTER TABLE 表å ADD åå æ°æ®ç±»å;
```
- ä¿®æ¹åæ°æ®ç±»å
```mysql
ALTER TABLE 表å MODIFY åå æ°æ°æ®ç±»å;
```
- ä¿®æ¹ååç§°åæ°æ®ç±»å
```mysql
ALTER TABLE 表å CHANGE åå æ°åå æ°æ°æ®ç±»å;
```
- å é¤å
```mysql
ALTER TABLE 表å DROP åå;
```
- D(Delete)ï¼å é¤
- å 餿°æ®è¡¨
```mysql
DROP TABLE 表å;
```
- å 餿°æ®è¡¨(夿ï¼å¦æåå¨åå é¤)
```mysql
DROP TABLE IF EXISTS 表å;
```
***
### DML
#### INSERT
* æ°å¢è¡¨æ°æ®
* æ°å¢æ ¼å¼ 1ï¼ç»æå®åæ·»å æ°æ®
```mysql
INSERT INTO 表å(åå1,åå2...) VALUES (å¼1,å¼2...);
```
* æ°å¢æ ¼å¼ 2ï¼é»è®¤ç»å
¨é¨åæ·»å æ°æ®
```mysql
INSERT INTO 表å VALUES (å¼1,å¼2,å¼3,...);
```
* æ°å¢æ ¼å¼ 3ï¼æ¹éæ·»å æ°æ®
```mysql
-- ç»æå®åæ¹éæ·»å æ°æ®
INSERT INTO 表å(åå1,åå2,...) VALUES (å¼1,å¼2,...),(å¼1,å¼2,...)...;
-- é»è®¤ç»ææåæ¹éæ·»å æ°æ®
INSERT INTO 表å VALUES (å¼1,å¼2,å¼3,...),(å¼1,å¼2,å¼3,...)...;
```
* åç¬¦ä¸²æ¼æ¥
```mysql
CONCAT(string1,string2,'',...)
```
* 注æäºé¡¹
- åååå¼çæ°é以忰æ®ç±»åè¦å¯¹åº
- é¤äºæ°åç±»åï¼å
¶ä»æ°æ®ç±»åçæ°æ®é½éè¦å å¼å·(åå¼åå¼é½å¯ä»¥ï¼æ¨èåå¼)
***
#### UPDATE
* ä¿®æ¹è¡¨æ°æ®è¯æ³
* æ åè¯æ³
```mysql
UPDATE 表å SET åå1 = å¼1,åå2 = å¼2,... [where æ¡ä»¶];
```
* ä¿®æ¹çµè§çä»·æ ¼ä¸º1800ãåºå为36
```mysql
UPDATE product SET price=1800,stock=36 WHERE NAME='çµè§';
SELECT * FROM product;-- æ¥çææååä¿¡æ¯
```
* 注æäºé¡¹
- ä¿®æ¹è¯å¥ä¸å¿
é¡»å æ¡ä»¶
- 妿ä¸å æ¡ä»¶ï¼åå°æææ°æ®é½ä¿®æ¹
***
#### DELETE
* å é¤è¡¨æ°æ®è¯æ³
```mysql
DELETE FROM 表å [WHERE æ¡ä»¶];
```
* 注æäºé¡¹
* å é¤è¯å¥ä¸å¿
é¡»å æ¡ä»¶
* 妿ä¸å æ¡ä»¶ï¼åå°æææ°æ®å é¤
â
***
### DQL
#### æ¥è¯¢è¯æ³
æ°æ®åºæ¥è¯¢éµå¾ªæ¡ä»¶å¨åçåå
```mysql
SELECT DISTINCT