1. æ°æ®åºåºç¨
1.1 æ¦å¿µ
1.1.1 ä»ä¹æ¯æ°æ®åº
ç®èè¨ä¹ï¼å°±æ¯åå¨æ°æ®ï¼ç®¡çæ°æ®çä»åºã
æ°æ®åºç好å¤
- æä¹ åæ°æ®å°æ¬å°ã
- å¯ä»¥å®ç°ç»æåæ¥è¯¢ï¼æ¹ä¾¿ç®¡çã
DBï¼æ°æ®åºï¼databaseï¼ï¼åå¨æ°æ®çâä»åºâãå®ä¿åäºä¸ç³»åæç»ç»çæ°æ®ã
DBMSï¼æ°æ®åºç®¡çç³»ç»ï¼Database Management Systemï¼ãæ°æ®åºæ¯éè¿DBMSå建åæä½ç容å¨ã
SQLï¼ç»æåæ¥è¯¢è¯è¨ï¼Structure Query Languageï¼ï¼ä¸é¨ç¨æ¥ä¸æ°æ®åºéä¿¡çè¯è¨ã
常è§çæ°æ®åºç®¡çç³»ç»å为ï¼
- å ³ç³»åæ°æ®åºï¼ OracleãMySQLãSQLServerãAccess
-
éå ³ç³»åæ°æ®åºï¼ MongoDBãRedisãSolrãElasticSearchãHiveãHBase
ââ
ââ
1.1.2 å ³ç³»ååéå ³ç³»å
ââæ©æåå±çæ°æ®åºå»ºç«å¨æ°æ®çç´§å¯å ³ç³»åºç¡ä¹ä¸ï¼å¦ï¼ç¶åå ³ç³»ãå¸çå ³ç³»ï¼ï¼æä»¬ç§°å ¶ä¸ºå ³ç³»åæ°æ®åºï¼ä¹ç§°ä¸ºä¼ ç»æ°æ®åºï¼ç°ä»æ°æ®åºå»ºç«å¨æ°æ®çæ¾æ£å ³ç³»åºç¡ä¹ä¸ï¼å¦ï¼ä¸å½äººåç¾å½äººãä¸å½äººåå°åº¦äººãè§é¢ãé³é¢ï¼ï¼æä»¬ç§°å ¶ä¸ºéå ³ç³»åæ°æ®åºnosqlï¼not only sqlï¼ãä¸çæ»å¨äºè®ºnosqlè½å¦å¹²æä¼ ç»æ°æ®åºï¼å¾å¤åå¦è ä¹æè¿ä¸ªå°æã以ææ¥çï¼ä¸¤è 没æçç¾ï¼å®ä»¬åæç¹ç¹ï¼æ ¹æ®ä¸å¡æ åµäºè¡¥ææ¯çè°ãä½æ»çæ¥è¯´åæ¥å ³ç³»åæ°æ®åºä¸ç»å¤©ä¸çæ ¼å±æ©è¢«æç ´ï¼é¢åä¸æ被èé£ï¼è§æ¨¡ä¸åç缩å°ï¼è½ç¶æ æ³å ¨é¢è¢«æ¿ä»£ï¼ä½å´æ©å·²é£å ä¸å¨ï¼æ²¦è½å°ä¸å¶ä¹å°ï¼Oracleçè¡°è½å°±æ¯æ好çè¯æï¼æ©æåªè¦æ¯å ¨ç大ä¼ä¸æ ä¸ä¾å¤é½æ¯é¨ç½²Oracleï¼ä½ç°å¨é½å¨å»Oracleåï¼é¿é就已ç»å ¨é¢ææ¥Oracleã
1.1.3 å ³ç³»åæ°æ®åº
ââå ³ç³»åæ°æ®åºæç¹å®çç»ç»æ¹å¼ï¼å ¶ä»¥è¡ååçå½¢å¼åå¨æ°æ®ï¼ä»¥ä¾¿äºç¨æ·ç解ã
ââå ³ç³»æ°æ®åºç表éç¨äºç»´è¡¨æ ¼æ¥åå¨æ°æ®ï¼æ¯ä¸ç§æè¡ä¸åæåçå ·æç¸å ³ä¿¡æ¯çé»è¾ç»ï¼å®ç±»ä¼¼äº Excle å·¥ä½è¡¨ãä¸ä¸ªæ°æ®åºå¯ä»¥å å«ä»»æå¤ä¸ªæ°æ®è¡¨ã表ä¸çä¸è¡å³ä¸ºä¸æ¡è®°å½ãæ°æ®è¡¨ä¸çæ¯ä¸å称为ä¸ä¸ªå段ï¼è¡¨æ¯ç±å ¶å å«çåç§å段å®ä¹çï¼æ¯ä¸ªå段æè¿°äºå®æå«æçæ°æ®çæä¹ï¼æ°æ®è¡¨ç设计å®é ä¸å°±æ¯å¯¹å段ç设计ãå建æ°æ®è¡¨æ¶ï¼ä¸ºæ¯ä¸ªå段åé ä¸ä¸ªæ°æ®ç±»åï¼å®ä¹å®ä»¬çæ°æ®é¿åº¦åå ¶ä»å±æ§ãè¡ååç交åä½ç½®è¡¨ç¤ºæ个å±æ§å¼ï¼å¦âæ°æ®åºåçâå°±æ¯è¯¾ç¨å称çå±æ§å¼ã
ââå ³ç³»æ¨¡åå¯ä»¥ç®åç解为äºç»´è¡¨æ ¼æ¨¡åï¼èä¸ä¸ªå ³ç³»åæ°æ®åºå°±æ¯ç±äºç»´è¡¨åå ¶ä¹é´çå ³ç³»ç»æçä¸ä¸ªæ°æ®éåã
ââ
ââ
1.2 æ°æ®åºåå¨æ°æ®çç¹ç¹
1ï¼å°æ°æ®æ¾å°è¡¨ä¸ï¼è¡¨åæ¾å°åºä¸ã
2ï¼ä¸ä¸ªæ°æ®åºä¸å¯ä»¥æå¤ä¸ªè¡¨ï¼æ¯ä¸ªè¡¨é½æä¸ä¸ªçååï¼ç¨æ¥æ è¯èªå·±ã表åå ·æå¯ä¸æ§ã
3ï¼è¡¨å ·æä¸äºç¹æ§ï¼è¿äºç¹æ§å®ä¹äºæ°æ®å¨è¡¨ä¸å¦ä½åå¨ï¼ç±»ä¼¼javaä¸ âç±»âç设计ã
4ï¼è¡¨ç±åç»æï¼æ们ä¹ç§°ä¸ºå段ãææ表é½æ¯ç±ä¸ä¸ªæå¤ä¸ªåç»æçï¼æ¯ä¸å类似java ä¸çâå±æ§âã
5ï¼è¡¨ä¸çæ°æ®æ¯æè¡åå¨çï¼æ¯ä¸è¡ç±»ä¼¼äºjavaä¸çâ对象âã
ââ
2. SQLè¯æ³æ¦è¿°
2.1 æ¦è¿°
ââç»æåæ¥è¯¢è¯è¨(Structured Query Language)ç®ç§°SQL(åé³ï¼/Ëes kjuË Ëel/ âS-Q-Lâ)ï¼æ¯ä¸ç§ç¹æ®ç®ççç¼ç¨è¯è¨ï¼æ¯ä¸ç§æ°æ®åºæ¥è¯¢åç¨åºè®¾è®¡è¯è¨ï¼ç¨äºååæ°æ®ä»¥åæ¥è¯¢ãæ´æ°å管çå ³ç³»æ°æ®åºç³»ç»ï¼åæ¶ä¹æ¯æ°æ®åºèæ¬æ件çæ©å±åã
ââSQL æ¯1986å¹´10 æç±ç¾å½å½å®¶æ åå±ï¼ANSIï¼éè¿çæ°æ®åºè¯è¨ç¾å½æ åï¼æ¥çï¼å½é æ ååç»ç»ï¼ISOï¼é¢å¸äºSQLæ£å¼å½é æ åã
2.2 SQLè¯è¨åç±»
DQLï¼Data Query Languageï¼ï¼æ°æ®æ¥è¯¢è¯è¨ ï¼SELECTï¼
DMLï¼Data Manipulation Language)
ââæ°æ®æ纵è¯å¥ï¼ç¨äºæ¥è¯¢ä¸ä¿®æ¹æ°æ®è®°å½ç¨äºæ·»å ãå é¤ãä¿®æ¹ãæ¥è¯¢æ°æ®åºè®°å½ï¼ç®ç§°CRUDï¼ï¼å¹¶æ£æ¥æ°æ®å®æ´æ§ï¼å æ¬å¦ä¸SQLè¯å¥ï¼
- INSERTï¼æ·»å æ°æ®å°æ°æ®åºä¸
- UPDATEï¼ä¿®æ¹æ°æ®åºä¸çæ°æ®
- DELETEï¼å é¤æ°æ®åºä¸çæ°æ®
- SELECTï¼éæ©ï¼æ¥è¯¢ï¼æ°æ® (SELECTæ¯SQLè¯è¨çåºç¡ï¼æ为éè¦)
DDLï¼Data Definition Langugeï¼
ââæ°æ®å®ä¹è¯è¨ï¼ç¨äºå®ä¹æ°æ®åºçç»æï¼æ¯å¦å建ãä¿®æ¹æå é¤æ°æ®åºå¯¹è±¡ï¼å æ¬å¦ä¸SQLè¯å¥ï¼
- CREATE TABLEï¼å建æ°æ®åºè¡¨
- ALTER TABLEï¼æ´æ¹è¡¨ç»æãæ·»å ãå é¤ãä¿®æ¹åé¿åº¦
- DROP TABLEï¼å é¤è¡¨
- CREATE INDEXï¼å¨è¡¨ä¸å»ºç«ç´¢å¼
- DROP INDEXï¼å é¤ç´¢å¼
DCLï¼Data Control Languageï¼
ââæ°æ®åºæ§å¶è¯è¨ï¼ç¨äºå®ä¹ç¨æ·ç访é®æéåå®å ¨çº§å«ãåªæ管çåææç¸åºçæéï¼å æ¬å¦ä¸SQLè¯å¥ï¼
- GRANTï¼æäºè®¿é®æé
- REVOKEï¼æ¤é访é®æé
- COMMITï¼æ交äºå¡å¤ç
- ROLLBACKï¼äºå¡å¤çåé
- SAVEPOINTï¼è®¾ç½®ä¿åç¹
- LOCKï¼å¯¹æ°æ®åºçç¹å®é¨åè¿è¡éå®
2.3 SQL çè¯è¨è§è
- å¿ é¡»åªè½å å« AâZï¼aâzï¼0â9ï¼ å ± 63 个å符
- å段åå¿ é¡»ä»¥åæ¯å¼å¤´ï¼å°½éä¸è¦ä½¿ç¨æ¼é³ï¼å¤ä¸ªåè¯ç¨ä¸å线éå¼ï¼èéjavaè¯è¨ç驼峰è§åã
- å¿ é¡»ä¿è¯ä½ çå段没æåä¿çåãæ°æ®åºç³»ç»æ常ç¨æ¹æ³å²çªï¼å¦where,order,groupï¼
- å¿ é¡»ä¸è½åç¨æ·å®ä¹çå ¶ä»å¯¹è±¡éå
- ä¸è½å¨å¯¹è±¡åçå符é´çç©ºæ ¼
- å¼ï¼é¤äºæ°å¼åï¼å符串ååæ¥ææ¶é´ç±»å使ç¨åå¼å·ï¼ââï¼
- å«åï¼å°½é使ç¨åå¼å·ï¼ââï¼ï¼èä¸ä¸å»ºè®®çç¥ as
- æææ ç¹ç¬¦å·ä½¿ç¨è±æç¶æä¸çåè§è¾å ¥æ¹å¼
- å¿ é¡»ä¿è¯ææ()ãåå¼å·ãåå¼å·æ¯æ对ç»æç
- æ°æ®åºã表åä¸å¾è¶ è¿ 30 个å符ï¼åéåéå¶ä¸º 29 个ï¼ä¸åæ°æ®åºï¼ä¸åçæ¬ä¼æä¸åï¼
- ä¿æå段ååç±»åçä¸è´æ§,å¨å½ååæ®µå¹¶ä¸ºå ¶æå®æ°æ®ç±»åçæ¶åä¸å®è¦ä¿è¯ä¸è´æ§ãåå¦æ°æ®ç±»åå¨ä¸ä¸ªè¡¨éæ¯æ´æ°,é£å¨å¦ä¸ä¸ªè¡¨éå¯å°±å«åæå符åäº
- å¨å½ä»¤è¡ä¸çè¦æ±ï¼ä¸ä¸ªè¯å¥å¯ä»¥åå¼å¤è¡ç¼åï¼ä»¥;æ\g ç»æ
- mysql å¯¹äº SQL è¯å¥ä¸åºå大å°åï¼SQL è¯å¥å ³é®åå°½é大åã
-
å¯ä»¥ä½¿ç¨
1ï¼#åè¡æ³¨é
2ï¼âç©ºæ ¼åè¡æ³¨é
3ï¼
2.4 MySQL çæ°æ®ç±»å
常ç¨çæ°æ®ç±»åæï¼
- æ´åï¼xxxintï¼
- ä½ç±»å(bit)
- æµ®ç¹åï¼float å doubleãrealï¼
- å®ç¹æ°ï¼decimal,numericï¼
- æ¥ææ¶é´ç±»åï¼date,time,datetime,yearï¼
- å符串ï¼char,varchar,xxxtextï¼
- äºè¿å¶æ°æ®ï¼xxxBlobãxxbinaryï¼
- æ举ï¼enumï¼
- éåï¼setï¼
- å¾ç
1ï¼æ´å
æ´æ°åçå¯éå±æ§æä¸ä¸ªï¼
- M: 宽度(å¨ 0 å¡«å çæ¶åæææä¹ï¼å¦åä¸éè¦æå®)ã
- unsigned: æ 符å·ç±»å(éè´)ã
- zerofill: 0 å¡«å ,(å¦ææåæ¯ zerofillï¼é£ä¹é»è®¤å°±æ¯æ 符å·)ï¼å¦ææå®äº zerofill åªæ¯è¡¨ç¤ºä¸å¤ M ä½æ¶ï¼ç¨ 0 å¨å·¦è¾¹å¡«å ï¼å¦æè¶ è¿ M ä½ï¼åªè¦ä¸è¶ è¿æ°æ®åå¨èå´å³å¯ã
åæ¥ï¼å¨ int(M) ä¸ï¼M çå¼è· int(M) æå å¤å°åå¨ç©ºé´å¹¶æ ä»»ä½å ³ç³»ã int(3)ãint(4)ãint(8) å¨ç£çä¸é½æ¯å ç¨4 bytes
2ï¼æµ®ç¹å
ââ对äºæµ®ç¹åç±»åï¼å¨ MySQL ä¸å精度å¼ä½¿ç¨ 4 个åèï¼å精度å¼ä½¿ç¨ 8 个åèã
-
MySQL å 许使ç¨éæ åè¯æ³ï¼å ¶ä»æ°æ®åºæªå¿ æ¯æï¼å æ¤å¦æ设计å°æ°æ®è¿ç§»ï¼åæ好ä¸è¦è¿ä¹ç¨ï¼ï¼FLOAT(M,D)æ DOUBLE(M,D)ãè¿éï¼(M,D)表示该å¼ä¸å ±æ¾ç¤º M ä½ï¼å ¶ä¸ D 表示å°æ°ç¹åå ä½ï¼M å D å称为精度åæ 度ã
ä¾å¦ï¼å®ä¹ä¸º FLOAT(5,2)çä¸ä¸ªåå¯ä»¥æ¾ç¤ºä¸º-999.99-999.99ãM åå¼èå´ä¸º 0-255ãD åå¼èå´ä¸º 0-30ï¼åæ¶å¿ é¡»<=Mã
-
å¦æåå¨æ¶ï¼æ´æ°é¨åè¶ åºäºèå´ï¼å¦ä¸é¢çä¾åä¸ï¼æ·»å æ°å¼ä¸º 1000.01ï¼ï¼MySql å°±ä¼æ¥éï¼ä¸å 许åè¿æ ·çå¼ãå¦æåå¨æ¶ï¼å°æ°ç¹é¨åè¥è¶ åºèå´ï¼å°±å以ä¸æ åµï¼è¥åèäºå ¥åï¼æ´æ°é¨å没æè¶ åºèå´ï¼ååªè¦åï¼ä½è½æåæä½å¹¶åèäºå ¥å é¤å¤ä½çå°æ°ä½åä¿åï¼ä¾å¦å¨FLOAT(5,2)åå æå ¥999.009ï¼è¿ä¼¼ç»ææ¯999.01ã
è¥åèäºå ¥åï¼æ´æ°é¨åè¶ åºèå´ï¼å MySql æ¥éï¼å¹¶æç»å¤çãå¦ 999.995 å-999.995 é½ä¼æ¥éã
- 说æï¼å°æ°ç±»åï¼ä¹å¯ä»¥å unsignedï¼ä½æ¯ä¸ä¼æ¹åæ°æ®èå´ï¼ä¾å¦ï¼float(3,2) unsigned ä»ç¶åªè½è¡¨ç¤º 0-9.99çèå´ã
- float å double å¨ä¸æå®ç²¾åº¦æ¶ï¼é»è®¤ä¼æç §å®é ç精度ï¼ç±å®é ç硬件åæä½ç³»ç»å³å®ï¼æ¥æ¾ç¤º
-
REAL å°±æ¯ DOUBLE ï¼å¦æ SQL æå¡å¨æ¨¡å¼å æ¬ REAL_AS_FLOAT é项ï¼REAL æ¯ FLOAT çåä¹è¯èä¸æ¯ DOUBLE
çåä¹è¯ã
ââ注æï¼å¨ç¼ç¨ä¸ï¼å¦æç¨å°æµ®ç¹æ°ï¼è¦ç¹å«æ³¨æ误差é®é¢ï¼å 为浮ç¹æ°æ¯ä¸åç¡®çï¼æ以æ们è¦é¿å 使ç¨â=âæ¥
å¤æ两个æ°æ¯å¦ç¸çãå¦æå¸æä¿è¯å¼æ¯è¾åç¡®ï¼æ¨è使ç¨å®ç¹æ°æ°æ®ç±»åã
3ï¼ä½ç±»åï¼äºè§£ï¼
ââBIT æ°æ®ç±»åå¯ç¨æ¥ä¿åä½å段å¼ãBIT(M)ç±»åå 许åå¨ M ä½å¼ãM èå´ä¸º 1~64ï¼é»è®¤ä¸º 1ã
ââBIT å ¶å®å°±æ¯åå ¥äºè¿å¶çå¼ï¼ç±»ä¼¼ 010110ãå¦æåå ¥ä¸ä¸ª BIT ç±»åçå¼ï¼ä½æ°å°äº M å¼ï¼å左补 0ãå¦æåå ¥ä¸ä¸ª BIT ç±»åçå¼ï¼ä½æ°å¤äº M å¼ï¼MySQL çæä½åå³äºæ¤æ¶ææç SQL 模å¼ï¼å¦æ模å¼æªè®¾ç½®ï¼MySQL å°å¼è£åªå°èå´çç¸åºç«¯ç¹ï¼å¹¶ä¿åè£å好çå¼ãå¦æ模å¼è®¾ç½®ä¸º traditional(âä¸¥æ ¼æ¨¡å¼â)ï¼è¶ åºèå´çå¼å°è¢«æç»å¹¶æ示é误ï¼å¹¶ä¸æ ¹æ® SQL æ åæå ¥ä¼å¤±è´¥ã
ââ对äºä½å段ï¼ç´æ¥ä½¿ç¨ SELECT å½ä»¤å°ä¸ä¼çå°ç»æï¼å¯ä»¥ç¨ bin()æ hex()å½æ°è¿è¡è¯»åã
4ï¼å®ç¹å
- DECIMAL å¨ MySQL å é¨ä»¥å符串形å¼åæ¾ï¼æ¯æµ®ç¹æ°æ´ç²¾ç¡®ãå®ç¹ç±»åå M+2 个åè
- DECIMAL(M,D)ä¸æµ®ç¹åä¸æ ·å¤çè§åãM çåå¼èå´ä¸º 0-65ï¼D çåå¼èå´ä¸º 0-30ï¼èä¸å¿ é¡»<=Mï¼è¶ åºèå´ä¼æ¥éã
- DECIMAL å¦ææå®ç²¾åº¦æ¶ï¼é»è®¤çæ´æ°ä½æ¯ 10ï¼é»è®¤çå°æ°ä½ä¸º 0ã
5ï¼æ¥ææ¶é´ç±»å
- å¯¹äº year ç±»åï¼è¾å ¥çæ¯ä¸¤ä½ï¼â00-68â表示 2000-2069 å¹´ï¼â70-99â表示 1970-1999 å¹´ãè®°æ¯è¾éº»ç¦ï¼å»ºè®®ä½¿ç¨ 4 ä½æ åæ ¼å¼ã
-
âYYYY-MM-DD HH:MM:SSâæâYY-MM-DD HH:MM:SSâï¼'YYYY-MM-DDâæâYY-MM-DDâæ ¼å¼çå符串ãï¼å 许âä¸ä¸¥æ ¼âï¼
è¯æ³ï¼ä»»ä½æ ç¹ç¬¦é½å¯ä»¥ç¨åæ¥æé¨åææ¶é´é¨åä¹é´çé´å²ç¬¦ãä¾å¦ï¼â98-12-31 11:30:45âãâ98.12.31 11+30+45âãâ98/12/31 113045â å '[email protected]@31 11|30|45âæ¯çä»·çã
- âYYYYMMDDâæâYYMMDDâæ ¼å¼ç没æé´å²ç¬¦çå符串ï¼åå®å符串对äºæ¥æç±»åæ¯ææä¹çãä¾å¦ï¼â19970523â åâ970523â被解é为 â1997-05-23âï¼ä½â971332âæ¯ä¸åæ³ç(å®æä¸ä¸ªæ²¡ææä¹çæåæ¥é¨å)ï¼å°å为â0000-00-00âã
-
对äºå æ¬æ¥æé¨åé´å²ç¬¦çå符串å¼ï¼å¦ææ¥åæçå¼å°äº 10ï¼ä¸éè¦æå®ä¸¤ä½æ°ãâ1979-6-9âä¸â1979-06-09â æ¯ç¸åçãåæ ·ï¼å¯¹äºå æ¬æ¶é´é¨åé´å²ç¬¦çå符串å¼ï¼å¦ææ¶ãååç§çå¼å°äº 10ï¼ä¸éè¦æå®ä¸¤ä½æ°ã
'1979-10-30 1:2:3âä¸â1979-10-30 01:02:03âç¸åã
- æ°åå¼åºä¸º 6ã8ã12 æè 14 ä½é¿ãå¦æä¸ä¸ªæ°å¼æ¯ 8 æ 14 ä½é¿ï¼ååå®ä¸º YYYYMMDD æ YYYYMMDDHHMMSSæ ¼å¼ï¼å 4 ä½æ°è¡¨ç¤ºå¹´ãå¦ææ°å æ¯ 6 æ 12 ä½é¿ï¼ååå®ä¸º YYMMDD æ YYMMDDHHMMSS æ ¼å¼ï¼å 2 ä½æ°è¡¨ç¤ºå¹´ãå ¶å®æ°å被解é为仿ä½ç¨é¶å¡«å å°äºæè¿çé¿åº¦ã
- ä¸è¬å注åæ¶é´ãåååå¸æ¶é´çï¼ä¸å»ºè®®ä½¿ç¨ datetime åå¨ï¼èæ¯ä½¿ç¨æ¶é´æ³ï¼å 为 datetime è½ç¶ç´è§ï¼ä½ä¸ä¾¿äºè®¡ç®ãèä¸ timestamp è¿æä¸ä¸ªéè¦ç¹ç¹ï¼å°±æ¯åæ¶åºæå ³ã
6ï¼å符
charï¼varcharï¼text çåºå«
char æ¯ä¸ç§åºå®é¿åº¦çç±»åï¼varchar åæ¯ä¸ç§å¯åé¿åº¦çç±»åï¼å®ä»¬çåºå«æ¯ï¼
- char å¦æä¸æå®(M)å表示é¿åº¦é»è®¤æ¯ 1 个å符ãvarchar å¿ é¡»æå®(M)ã
- char(M)ç±»åçæ°æ®åéï¼æå¤å®¹çº³2000个å符ï¼ï¼æ¯ä¸ªå¼é½å ç¨ M 个å符ï¼å¦ææ个é¿åº¦å°äº Mï¼MySQL å°±ä¼å¨å®çå³è¾¹ç¨ç©ºæ ¼å符补足ãï¼ä¾å¦ï¼char(11)åå¨abcï¼å 11ä½ãå¨æ£ç´¢æä½ä¸é£äºå¡«è¡¥åºæ¥çç©ºæ ¼å符å°è¢«å»æï¼å¦æåå ¥æ¶å³è¾¹æ¬èº«å°±å¸¦ç©ºæ ¼ï¼æ£ç´¢æ¶ä¹ä¼è¢«å»æï¼
- å¨ varchar(M)ç±»åçæ°æ®åéï¼æå¤å®¹çº³4000个å符ï¼ï¼æ¯ä¸ªå¼åªå ç¨å好å¤ç¨çå符åå ä¸ä¸ä¸ªå°ä¸¤ä¸ªç¨æ¥è®°å½å ¶é¿åº¦çåèãï¼ä¾å¦ï¼varchar(11)åå¨abcï¼åªå 3ä½ã以utf8ç¼ç 计ç®çè¯ï¼ä¸ä¸ªæ±åå¨u8ä¸å 3个åèãå³æ»é¿åº¦ä¸º L å符+1/2 ååèï¼å¨Oracleä¸ï¼ä¸ºvarchar2ï¼
ââç±äºæç§åå char åºå®é¿åº¦ï¼æ以å¨å¤çé度ä¸è¦æ¯ varchar å¿«éå¾å¤ï¼ä½ç¸å¯¹è´¹åå¨ç©ºé´ï¼æ以对åå¨ä¸å¤§ï¼ä½å¨é度ä¸æè¦æ±çå¯ä»¥ä½¿ç¨ char ç±»åï¼åä¹å¯ä»¥ç¨ varchar ç±»åæ¥å®ä¾ã
- text ææ¬ç±»åï¼å¯ä»¥åæ¯è¾å¤§çææ¬æ®µï¼æç´¢é度ç¨æ ¢ï¼å æ¤å¦æä¸æ¯ç¹å«å¤§çå 容ï¼å»ºè®®ä½¿ç¨ charï¼varcharæ¥ä»£æ¿ãè¿æ text ç±»åä¸ç¨å é»è®¤å¼ï¼å äºä¹æ²¡ç¨ã
注ï¼ä¸åæ°æ®åºçæ¬é¿åº¦éå¶å¯è½ä¼æä¸å
åªäºæ åµä½¿ç¨ char æ´å¥½?
- åå¨å¾ççä¿¡æ¯ï¼æ¯å¦é¨çå·ç 101ï¼201â¦â¦è¿æ ·å¾ççä¿¡æ¯åºè¯¥ç¨ charï¼å 为 varchar è¿è¦å 个 byte ç¨äºåå¨ä¿¡æ¯é¿åº¦ï¼æ¬æ¥æç®è约åå¨çç°å¨å¾ä¸å¿å¤±ã
- åºå®é¿åº¦çï¼æ¯å¦ä½¿ç¨ uuid ä½ä¸ºä¸»é®ï¼é£ç¨ char åºè¯¥æ´åéãå 为ä»åºå®é¿åº¦ï¼varchar å¨ææ ¹æ®é¿åº¦çç¹æ§å°±æ¶å¤±äºï¼èä¸è¿è¦å 个é¿åº¦ä¿¡æ¯ã
- ååé¢ç¹æ¹åç columnãå 为 varchar æ¯æ¬¡åå¨é½è¦æé¢å¤ç计ç®ï¼å¾å°é¿åº¦çå·¥ä½ï¼å¦æä¸ä¸ªé常é¢ç¹æ¹åçï¼é£å°±è¦æå¾å¤çç²¾åç¨äºè®¡ç®ï¼èè¿äºå¯¹äº char æ¥è¯´æ¯ä¸éè¦çã
- MyISAM å MEMORY åå¨å¼æä¸æ è®ºä½¿ç¨ char è¿æ¯ varchar å ¶å®é½æ¯ä½ä¸º char ç±»åå¤ççãé¤æ¤ä¹å¤ï¼å»ºè®®ä½¿ç¨ varchar ç±»åãç¹å«æ¯ InnoDB åå¨å¼æã
7ï¼äºè¿å¶å¼ç±»åï¼äºè§£ï¼
å æ¬ï¼xxxBLOB å xxxBINARY
ââBINARY å VARBINARY ç±»åç±»ä¼¼äº CHAR å VARCHAR ç±»åï¼ä½æ¯ä¸åçæ¯ï¼å®ä»¬åå¨çä¸æ¯å符å符串ï¼èæ¯äºè¿å¶ä¸²ãæ以å®ä»¬æ²¡æå符éï¼å¹¶ä¸æåºåæ¯è¾åºäºåå¼åèçæ°å¼å¼ãå½ä¿å BINARY(M)å¼æ¶ï¼å¨å®ä»¬å³è¾¹å¡«å 0x00(é¶åè)å¼ä»¥è¾¾å°æå®é¿åº¦ãåå¼æ¶ä¸å é¤å°¾é¨çåèãæ¯è¾æ¶ææåèå¾éè¦ï¼å ä¸ºç©ºæ ¼å 0x00 æ¯ä¸åçï¼0x00<ç©ºæ ¼ï¼ï¼å æ¬ ORDER BY å DISTINCT æä½ãæ¯å¦æå ¥âa âä¼åæâa \0âã
ââBLOB æ¯ä¸ä¸ªäºè¿å¶å¤§å¯¹è±¡ï¼å¯ä»¥å®¹çº³å¯åæ°éçæ°æ®ãæ 4 ç§ BLOB ç±»åï¼TINYBLOBãBLOBãMEDIUMBLOBå LONGBLOBãå®ä»¬åªæ¯å¯å®¹çº³å¼çæ大é¿åº¦ä¸åãåå«ä¸åç§ TEXT ç±»åï¼TINYTEXTãTEXTãMEDIUMTEXT å LONGTEXT对åºæç¸åçæ大é¿åº¦ååå¨éæ±ãå¨ TEXT æ BLOB åçåå¨ææ£ç´¢è¿ç¨ä¸ï¼ä¸åå¨å¤§å°å转æ¢ãBLOB å TEXT åä¸è½æé»è®¤å¼ãBLOB æ TEXT 对象çæ大大å°ç±å ¶ç±»åç¡®å®ï¼ä½å¨å®¢æ·ç«¯åæå¡å¨ä¹é´å®é å¯ä»¥ä¼ éçæ大å¼ç±å¯ç¨å åæ°éåéä¿¡ç¼ååºå¤§å°ç¡®å®ãä½ å¯ä»¥éè¿æ´æ¹max_allowed_packet åéçå¼æ´æ¹æ¶æ¯ç¼ååºç大å°ï¼ä½å¿ é¡»åæ¶ä¿®æ¹æå¡å¨å客æ·ç«¯ç¨åºã
8ï¼æ举ï¼ENUMï¼
MySql ä¸ç ENUM æ¯ä¸ä¸ªå符串对象ï¼å ¶å¼æ¥èªè¡¨å建æ¶å¨åè§å®ä¸æ¾å¼æ举çä¸åå¼ï¼
- å¯ä»¥æå ¥ç©ºå符串""å NULLï¼å¦æè¿è¡ NULL çè¯ï¼ã
- å¦æä½ å°ä¸ä¸ªéæ³å¼æå ¥ ENUM(ä¹å°±æ¯è¯´ï¼å 许çå¼åä¹å¤çå符串)ï¼å¦ææ¯ä¸¥æ ¼æ¨¡å¼ï¼å°ä¸è½æå ¥ï¼å¦ææ¯éä¸¥æ ¼æ¨¡å¼ï¼å°éç¨ç¬¬ä¸ä¸ªå ç´ ä»£æ¿ï¼å¹¶è¦åã
- ENUM æå¤å¯ä»¥æ 65,535 个æåï¼éè¦ 2 个åèåå¨ã
- å½å建表æ¶ï¼ENUM æåå¼çå°¾é¨ç©ºæ ¼å°èªå¨è¢«å é¤ã
å¼çç´¢å¼è§åå¦ä¸ï¼
- æ¥èªåè§å®çå 许çå¼åä¸çå¼ä» 1 å¼å§ç¼å·ã
- 空å符串é误å¼çç´¢å¼å¼æ¯ 0ã
- NULL å¼çç´¢å¼æ¯ NULLã
9ï¼éåï¼SETï¼
- SET å ENUM ç±»åé常类似ï¼ä¹æ¯ä¸ä¸ªå符串对象ï¼éé¢å å« 0~64 个æåã
- SET å ENUM åå¨ä¸ææä¸åï¼SET æ¯æ ¹æ®æåç个æ°å³å®åå¨çåèæ°ã
- SET å ENUM æ主è¦çåºå«å¨äº SET ç±»åä¸æ¬¡å¯ä»¥éæ©å¤ä¸ªæåï¼è ENUM ååªè½éæ©ä¸ä¸ªã
10ï¼ç¹æ®ç NULL ç±»å
Null ç±»åç¹å¾ï¼
- ææçç±»åçå¼é½å¯ä»¥æ¯ nullï¼å æ¬ intãfloat çæ°æ®ç±»å
- 空å符串ââï¼ä¸çäº nullï¼0 ä¹ä¸çäº nullï¼false ä¹ä¸çäº null
- ä»»ä½è¿ç®ç¬¦,å¤æç¬¦ç¢°å° NULL,é½å¾ NULL
- NULL çå¤æåªè½ç¨ is null,is not null
- NULL å½±åæ¥è¯¢é度,ä¸è¬é¿å 使å¼ä¸º NULL
为ä»ä¹å»ºè¡¨æ¶,å not null default ââ / default 0
- ä¸æ³è®©è¡¨ä¸åºç° null å¼. 为ä»ä¹ä¸æ³è¦ç null çå¼ã
- ä¸å¥½æ¯è¾,null æ¯ä¸ç§ç±»åï¼æ¯è¾æ¶ï¼åªè½ç¨ä¸é¨ç is null å is not null æ¥æ¯è¾ã 碰å°è¿ç®ç¬¦ï¼ä¸å¾è¿å nullã
- æçä¸é«ï¼å½±åæé«ç´¢å¼ææã å æ¤ï¼æ们å¾å¾å¨å»ºè¡¨æ¶ not null default ââ/
11ï¼å¾ç
ââblob äºè¿å¶æ°æ®ï¼å¯ä»¥åæ¾å¾çã声é³ï¼å®¹é4gãæ©ææè¿æ ·ç设计ãä½å ¶ç¼ºç¹é常ææ¾ï¼æ°æ®åºåºå¤§ï¼å¤ä»½ç¼æ ¢ï¼è¿äºå 容å»å¤ä»½å¤ä»½ä»·å¼ä¸å¤§ãåæ¶æ°æ®åºè¿ç§»æ¶è¿å¤§ï¼è¿ç§»æ¶é´è¿ä¹ ãæ以ç®å主æµé½ä¸ä¼ç´æ¥åå¨è¿æ ·çæ°æ®ï¼èåªåå¨å ¶è®¿é®è·¯å¾ï¼æ件ååæ¾å¨ç£çä¸ã
2.5 MySQL çè¿ç®ç¬¦
ï¼1ï¼ç®æ¯è¿ç®ç¬¦ï¼+ - * /ï¼é¤ä¹å¯ä»¥åæ div) %ï¼å模å¯ä»¥åæ modï¼
ï¼2ï¼æ¯è¾è¿ç®ç¬¦ï¼= > >= < <= !=ï¼ä¸çäºè¿å¯ä»¥åæ<>ï¼ <=>ï¼å®å ¨çäºï¼
ï¼3ï¼é»è¾è¿ç®ç¬¦ï¼&&ï¼é»è¾ä¸ä¹å¯ä»¥åæ andï¼ ||ï¼é»è¾æä¹å¯ä»¥åæ orï¼ notï¼é»è¾éï¼
ï¼4ï¼èå´ï¼è¡¨è¾¾å¼ between ⦠and ⦠ï¼ä¹å¯ä»¥åæ 表达å¼>=⦠and è¡¨è¾¾å¼ <=â¦ï¼
âââââè¡¨è¾¾å¼ not between ⦠and â¦ï¼ä¹å¯ä»¥åæ 表达å¼<⦠|| è¡¨è¾¾å¼ >â¦ï¼
ï¼5ï¼éåï¼in (å¼ï¼å¼ï¼å¼â¦) not in(å¼ï¼å¼ï¼å¼â¦)
ï¼6ï¼æ¨¡ç³æ¥è¯¢ï¼LIKE NOT LIKEï¼éé 符ï¼%表示 0-n 个å符ï¼_ä¸å线代表ä¸ä¸ªå符
ï¼7ï¼ä½è¿ç®ç¬¦ï¼&ï¼æä½ä¸ï¼ |ï¼æä½æï¼^ï¼æä½å¼æï¼~ï¼æä½ååï¼>>ï¼å³ç§»ï¼<<ï¼å·¦ç§»ï¼
ï¼8ï¼NULL å¼å¤æï¼is null æ is not nullï¼å¦æä½¿ç¨ null=nullï¼null<>null,null=0,null<>0,null=false çé½ä¸å¯¹ãä¸è¿ xxx is null å¯ä»¥ä½¿ç¨ xxx <=> null ï¼xxx is not null å¯ä»¥åæ not xxx <=> null
ç»è®ºï¼ææçè¿ç®ç¬¦éå° NULL ç»æé½æ¯ NULLï¼é¤äº<=>
#NULL å¼å¤æä¸å¤ç
#æ¥è¯¢å¥éç¾åæ¯ä¸ä¸ºç©ºçåå·¥ç¼å·
SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NOT NULL;
#æ¥è¯¢å¥éç¾åæ¯ä¸ºç©ºçåå·¥ç¼å·
SELECT eid,commission_pct FROM t_salary WHERE commission_pct IS NULL;
#å
³äº null å¼è®¡ç®
#ææè¿ç®ç¬¦éå° null é½æ¯ null
#计ç®å®é
çèªèµï¼ basic_salary + salary * å¥éç¾åæ¯
#å½æ°ï¼IFNULL(表达å¼,ç¨ä»ä¹å¼ä»£æ¿)
SELECT eid,basic_salary + performance_salary *(1+ commission_pct) FROM t_salary;#é误ç
SELECT eid,basic_salary + performance_salary *(1+ IFNULL(commission_pct,0)) FROM t_salary;
#<=>å®å
¨çäº
#æ¥è¯¢å¥éç¾åæ¯ä¸ºç©ºçåå·¥ç¼å·
SELECT eid,commission_pct FROM t_salary WHERE commission_pct <=> NULL;
3. MySQLç®åç使ç¨
ââMySQL æ¯ä¸ç§å¼æ¾æºä»£ç çå ³ç³»åæ°æ®åºç®¡çç³»ç»ï¼å¼åè 为çå ¸ MySQL AB å ¬å¸ãå¨ 2008 å¹´ 1 æ 16 å·è¢« Sunå ¬å¸æ¶è´ãè 2009 å¹´ï¼SUN å被 Oracle æ¶è´ãç®å MySQL 被广æ³å°åºç¨å¨ Internet ä¸çä¸å°åç½ç«ä¸ãç±äºå ¶ä½ç§¯å°ãé度快ãæ»ä½æ¥æææ¬ä½ï¼å°¤å ¶æ¯å¼æ¾æºç è¿ä¸ç¹ç¹ï¼è®¸å¤ä¸å°åç½ç«ä¸ºäºéä½ç½ç«æ»ä½æ¥æææ¬èéæ©äºMySQL ä½ä¸ºç½ç«æ°æ®åºï¼Facebook, Twitter, YouTubeï¼ãé¿éæåºâå» IOEâï¼æ´å¤ç½ç«ä¹å¼å§éæ© MySQLã
3.1 MySQLæå¡çå¯å¨ååæ¢
ââå ³ç³»åæ°æ®åºå为æ¡é¢æä»¶å ±äº«åæ°æ®åºï¼ä¾å¦ Accessï¼å C/S æ¶æçç½ç»å ±äº«åæ°æ®åºï¼ä¾å¦ï¼MySQLï¼OracleçãMySQL 软件çæå¡å¨ç«¯å¿ é¡»å å¯å¨ï¼å®¢æ·ç«¯æå¯ä»¥è¿æ¥å使ç¨ä½¿ç¨æ°æ®åºã
ââ
æ¹å¼ä¸ï¼å¾å½¢åæ¹å¼
- âæççµè/计ç®æºââ>å³é®â>â管çââ>âæå¡ââ>å¯å¨åå ³é MySQL
- âå¼å§èåââ>âæ§å¶é¢æ¿ââ>â管çå·¥å ·ââ>âæå¡ââ>å¯å¨åå ³é MySQL
- âä»»å¡ç®¡çå¨ââ>âæå¡ââ>å¯å¨åå ³é MySQL
æ¹å¼äºï¼éè¿ç®¡çå身份è¿è¡
- net start æå¡åï¼å¯å¨æå¡ï¼
- net stop æå¡åï¼åæ¢æå¡ï¼
3.2 MySQLæå¡çç»å½åéåº
æ¹å¼ä¸ï¼éè¿mysqlèªå¸¦ç客æ·ç«¯ï¼åªéäºrootç¨æ·ï¼
æ¹å¼äºï¼éè¿windowsèªå¸¦ç客æ·ç«¯
-
ç»å½ï¼mysql -h 主æºå -P 端å£å· -u ç¨æ·å -p å¯ç
ä¾å¦ï¼mysql -h localhost -P 3306 -u root -proo
- éåºï¼exitæctrl+C
3.3 MySQLç常è§å½ä»¤
注 æ
⢠SQL è¯è¨å¤§å°åä¸ææã
⢠SQL å¯ä»¥åå¨ä¸è¡æè å¤è¡
â¢ å ³é®åä¸è½è¢«ç¼©åä¹ä¸è½åè¡
⢠ååå¥ä¸è¬è¦åè¡åã
⢠使ç¨ç¼©è¿æé«è¯å¥çå¯è¯»æ§ã
3.3.1 æ¥çæå¡å¨ççæ¬
- æ¹å¼ä¸ï¼ç»å½å°mysqlæå¡ç«¯
select version();
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.25 |
+-----------+
1 row in set (0.00 sec)
- æ¹å¼äºï¼æ²¡æç»å½å°mysqlæå¡ç«¯
userå½åè¿æ¥ç¨æ·
3.3.2 æ°æ®åºç常è§æä½
1ï¼å建æ°æ®åº
create database åºå DEFAULT CHARACTER SET utf8;(设置é»è®¤å符é UTF-8)
mysql> create database cgb DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected, 1 warning (0.02 sec)
2ï¼å é¤æ°æ®åºåº
drop database åºå;
mysql> drop database cgb;
Query OK, 0 rows affected (0.04 sec)
3ï¼æ¥çå½åææçæ°æ®åº
show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| cgb2015 |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
4ï¼æå¼æå®çåº
use åºå;
mysql> use cgb2015;
Database changed
5ï¼æ¥çå½åæ£å¨ä½¿ç¨åªä¸ªæ°æ®åº
select database();
mysql> select database();
+------------+
| database() |
+------------+
| cgb2015 |
+------------+
1 row in set (0.00 sec)
注æï¼è¦æä½è¡¨æ ¼åæ°æ®ä¹åå¿ é¡»å 说ææ¯å¯¹åªä¸ªæ°æ®åºè¿è¡æä½ï¼å¦åå°±è¦å¯¹ææ对象å ä¸âæ°æ®åºå.âã
3.3.3 表ç常ç¨æä½
1ï¼æ¥çå½ååºçææ表
show tables;
mysql> show tables;
+-------------------+
| Tables_in_cgb2015 |
+-------------------+
| courses |
| dept |
| emp |
| scores |
| students |
| tb_door |
| tb_user |
| tb_user_addr |
| teachers |
| test |
+-------------------+
10 rows in set (0.01 sec)
2ï¼æ¥çæå®åºä¸çææ表
show tables from åºå;
mysql> show tables from mysql;
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+------------------------------------------------------+
35 rows in set (0.01 sec)
3ï¼å建表
CREATE TABLE 表å称(
å段å 1 æ°æ®ç±»å 1 ä¸»é® èªå¢é¿,
å段å 2 æ°æ®ç±»å 2 é空 é»è®¤å¼,
å段å 3 æ°æ®ç±»å 3
)
ENGINE=å½åè¡¨æ ¼çå¼æ
AUTO_INCREMENT=èªå¢é¿çèµ·å§å¼
DEFAULT CHARSET=表æ°æ®çé»è®¤å符;
create table tb_door(
id int primary key auto_increment,
door_name varchar(100),
tel varchar(50)
);
Query OK, 0 rows affected (0.04 sec)
4ï¼æ¥çæå®è¡¨çç»æ
desc 表å;
mysql> desc tb_door;
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| door_name | varchar(100) | YES | | NULL | |
| tel | varchar(50) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
SHOW CREATE TABLE 表å(æ¥ç表çå®ä¹)
mysql> SHOW CREATE TABLE tb_door;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_door | CREATE TABLE `tb_door` (
`id` int NOT NULL AUTO_INCREMENT,
`door_name` varchar(100) DEFAULT NULL,
`tel` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb3 |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
5ï¼å é¤è¡¨
drop table 表å;
注æï¼æ°æ®åç»æé½è¢«å é¤
mysql> drop table tb_door;
Query OK, 0 rows affected (0.04 sec)
6ï¼éå½å表
alter table 表å rename æ°è¡¨å;
rename table 表å to æ°è¡¨å;
mysql> show tables;
+-------------------+
| Tables_in_cgb2015 |
+-------------------+
| courses |
| dept |
| emp |
| scores |
| students |
| tb_door |
| tb_user |
| tb_user_addr |
| teachers |
| test |
+-------------------+
10 rows in set (0.01 sec)
mysql> rename table test to data_test;
Query OK, 0 rows affected (0.05 sec)
mysql> show tables;
+-------------------+
| Tables_in_cgb2015 |
+-------------------+
| courses |
| data_test |
| dept |
| emp |
| scores |
| students |
| tb_door |
| tb_user |
| tb_user_addr |
| teachers |
+-------------------+
10 rows in set (0.00 sec)
3.3.4 表å ç常ç¨æä½
1ï¼å表ä¸æå ¥è®°å½
insert into 表å value(å段1å±æ§,å段2å±æ§,å段3å±æ§,...);
#å表ä¸æ·»å æå®å段记å½ï¼æ²¡æ被æå®çå段ä¼æ·»å é»è®¤å¼
insert into 表å(å段å1,å段å2,å段å3) value(å段1å±æ§,å段2å±æ§,å段3å±æ§,...);
#åtb_door表ä¸æå
¥2æ¡è®°å½
mysql> insert into tb_door values(null,'æ°¸å大ç1åº',666);
mysql> insert into tb_door values(null,' æ°¸å大ç2åº',888);
Query OK, 1 row affected (0.01 sec)
Query OK, 1 row affected (0.01 sec)
1ãå¼ç顺åºã个æ°ä¸å段å表ä¸å段ç顺åºã个æ°ä¸è´
- å¦æ个æ°å°äºå°±æ¥ Column count doesnât match value count
å¦æ VALUES åé¢ç()ä¸æ²¡æååºå段ï¼é£ä¹é»è®¤å°±æ¯ä¸ºè¡¨ä¸çææå段èµå¼ï¼é£ä¹ä¸ª>æ°ä¸é¡ºåºä¸è¡¨ç»æä¸å段å®ä¹çä¸è´
â
2ãå ³äºèªå¢é¿åï¼é»è®¤å¼åï¼å 许为 NULL åçèµå¼
â
ï¼1ï¼å¦æå段å表ååºäºå段åï¼é£ä¹å¼å表ä¸å°±è¦ä¸ºå ¶èµå¼ï¼åªæå®æ¯èªå¢é¿åï¼æé»è®¤å¼åï¼å¯ä»¥ä¸º NULL å¼çåã
- InnoDB 表çèªå¨å¢é¿åå¯ä»¥æå¨æå ¥åéçå¼ï¼ä½æ¯æå ¥çå¼å¦ææ¯ NULL æè 0ï¼åå®é æå ¥çå°æ¯èªå¨å¢é¿åçå¼ï¼
- å¦æå声æäºâé»è®¤çº¦æâé£ä¹å¯¹åºçä½ç½®å¯ä»¥èµå¼å ·ä½çå¼ï¼ä¹å¯ä»¥ä½¿ç¨âDEFAULTâï¼è¡¨ç¤ºä½¿ç¨é»è®¤å¼ï¼
å¦æåå è®¸äº NULL å¼ï¼é£ä¹å¯ä»¥ä¸ºå¯¹åºçå段å¯ä»¥èµå¼ä¸ºå ·ä½å¼ä¹å¯ä»¥èµå¼ä¸º NULL
â
ï¼2ï¼å¯¹äºæ²¡æååºçå段ï¼åèªå¢åå°±èªå¨èµå¼ï¼åé»è®¤å¼åå°±èªå¨èµé»è®¤å¼ï¼åå 许 NULL çåå°±èªå¨èµ NULLå¼
â
3ãVALUES ä¹å¯ä»¥åæ VALUEï¼ä½æ¯ VALUES æ¯æ ååæ³
4ãå¯ä»¥åæ¶æå ¥å¤è¡
5ãå¦ææå ¥ä»è¡¨çæ°æ®ï¼è¦æ³¨ææ¥ç主表åç §å段çå¼æ¯å¦åå¨
6ãå¼çä½ç½®å¯ä»¥æ¯å¸¸éå¼ã表达å¼ãå½æ°
2ï¼æ¥è¯¢è¡¨ä¸è®°å½
select *ï¼å
¨è¡¨ï¼/å段åï¼æå®ï¼from 表å;
mysql> select * from tb_door;
+----+-------------------+------+
| id | door_name | tel |
+----+-------------------+------+
| 1 | æ°¸å大ç1åº | 666 |
| 2 | æ°¸å大ç2åº | 888 |
| 3 | æ°¸å大ç1åº | 666 |
| 4 | æ°¸å大ç2åº | 888 |
+----+-------------------+------+
4 rows in set (0.00 sec)
- å¦æ SELECT åé¢æ¯*ï¼é£ä¹è¡¨ç¤ºæ¥è¯¢ææå段
- SELECT åé¢çæ¥è¯¢å表ï¼å¯ä»¥æ¯è¡¨ä¸çå段ï¼å¸¸éå¼ï¼è¡¨è¾¾å¼ï¼å½æ°
- æ¥è¯¢çç»ææ¯ä¸ä¸ªèæç表
- select è¯å¥ï¼å¯ä»¥å å« 5 ç§åå¥ï¼ä¾æ¬¡æ¯ whereã group byãhavingã order byãlimit å¿ é¡»ç §è¿ä¸ªé¡ºåºã
3ï¼å é¤è¡¨ä¸è®°å½
Delete * from 表å where æ¡ä»¶;
mysql> Delete from tb_door where id=3;
Query OK, 1 row affected (0.01 sec)
mysql> Delete from tb_door where id=4;
Query OK, 1 row affected (0.01 sec)
mysql> select * from tb_door;
+----+-------------------+------+
| id | door_name | tel |
+----+-------------------+------+
| 1 | æ°¸å大ç1åº | 666 |
| 2 | æ°¸å大ç2åº | 888 |
+----+-------------------+------+
2 rows in set (0.00 sec)
1ãå¦æä¸å where æ¡ä»¶ï¼è¡¨ç¤ºå é¤æ´å¼ 表çæ°æ®ï¼è¡¨ç»æä¿çã
delete from 表å;
å é¤æ´å¼ 表çæ°æ®è¿å¯ä»¥ä½¿ç¨ truncate 表å;
â
åºå«ï¼
- truncate ç¸å½äºå é¤è¡¨åé建ä¸å¼ ååç»æç表ï¼æä½åå¾å°ä¸å¼ å ¨æ°è¡¨ï¼è delete æ¯å¨åæ表ä¸å é¤æ°æ®ãå¦æå³å®æ¸ 空ä¸å¼ 表çæ°æ®ï¼truncate é度æ´å¿«ä¸äºã
TRUNCATE è¯å¥ä¸è½åæ»
â
2ãå¦æå é¤ä¸»è¡¨çè®°å½ï¼è¦æ³¨ææ¥çä»è¡¨çå¤é®æ¯å¦æä¾èµè¯¥è¡çå¼ï¼å¦ææ
ï¼1ï¼å¦æå¤é®æ¯ on delete RESTRICT æ on delete NO ACTIONï¼é£ä¹è¦å å¤çä»è¡¨çæ°æ®ï¼æè½å é¤
ï¼2ï¼å¦æå¤é®æ¯ on delete SET NULL æ on delete CASCADEï¼é£ä¹å é¤æ¶ä»è¡¨ç对åºè®°å½ä¹ä¼è¢«ç½®ç©ºæè·çå é¤ã
3ãå¯ä»¥ä¸æ¬¡å é¤å¤ä¸ªè¡¨çæ°æ®
ä¾å¦ï¼ä¸¤ä¸ªè¡¨æ²¡æ建ç«å¤é®ï¼ä½é»è¾ä¸æå¤é®å ³ç³»ï¼ä¹å¯ä»¥éè¿å é¤å¤ä¸ªè¡¨çæ°æ®æ¥å®ç°çº§èå é¤
4ãæææ£å¨è¿è¡çç¸å ³äºå¡è¢«æ交ã
5ãææç¸å ³ç´¢å¼è¢«å é¤ã
4ï¼ä¿®æ¹è®°å½
update 表å set ä¿®æ¹åçå±æ§ where æ¡ä»¶;
#ä¿®æ¹tb_door表ä¸id为1çè®°å½
mysql> update tb_door set tel=555 where id=1;
mysql> select * from tb_door;
+----+-------------------+------+
| id | door_name | tel |
+----+-------------------+------+
| 1 | æ°¸å大ç1åº | 555 |
| 2 | æ°¸å大ç2åº | 888 |
+----+-------------------+------+
2 rows in set (0.00 sec)
1ãå¦æä¸å where æ¡ä»¶ï¼ä¼ä¿®æ¹ææè¡ã
2ãå¼å¯ä»¥æ¯å¸¸éå¼ã表达å¼ãå½æ°ã
3ãå¯ä»¥åæ¶æ´æ°å¤å¼ 表ï¼å¦æ两个表没æ建ç«å¤é®ï¼ä½é»è¾ä¸æå¤é®å ³ç³»ã
4ãå¦æä¿®æ¹ä»è¡¨å¤é®å段çæ°æ®ï¼è¦æ³¨ææ¥ç主表åç §å段çå¼æ¯å¦åå¨ã
5ãå¦æä¿®æ¹ä¸»è¡¨ç被åèçå段çå¼ï¼è¦æ³¨ææ¥çä»è¡¨çå¤é®æ¯å¦æä¾èµè¯¥å¼ï¼å¦ææ
- å¦æå¤é®æ¯ on update RESTRICT æ on update NO ACTIONï¼é£ä¹è¦å å¤çä»è¡¨çæ°æ®ï¼æè½ä¿®æ¹
- å¦æå¤é®æ¯ on update SET NULL æ on update CASCADEï¼é£ä¹ç´æ¥ä¿®æ¹ï¼ä»è¡¨çå¤é®å段ä¼èªå¨å¤ç
5ï¼å¯¹åæä½
#å¢å ä¸å
alter table 表å add column åå æ°æ®ç±»å; #é»è®¤å¨æå
alter table 表å add column åå æ°æ®ç±»å after æä¸å;#å¨æåä¹å
alter table 表å add column åå æ°æ®ç±»å first;#å¨é¦å
mysql> alter table tb_door add column loc varchar(30);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from tb_door;
+----+-------------------+------+------+
| id | door_name | tel | loc |
+----+-------------------+------+------+
| 1 | æ°¸å大ç1åº | 555 | NULL |
| 2 | æ°¸å大ç2åº | 888 | NULL |
+----+-------------------+------+------+
2 rows in set (0.00 sec)
#ä¿®æ¹åç±»å
alter table 表å modify column åå æ°æ®ç±»å;
alter table 表å modify column åå æ°æ®ç±»å after æä¸å;
alter table 表å modify column åå æ°æ®ç±»å firstï¼
#å é¤å
alter table 表å drop column åå;
mysql> alter table tb_door drop column loc;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from tb_door;
+----+-------------------+------+
| id | door_name | tel |
+----+-------------------+------+
| 1 | æ°¸å大ç1åº | 555 |
| 2 | æ°¸å大ç2åº | 888 |
+----+-------------------+------+
2 rows in set (0.00 sec)
4. DQL æ°æ®æ¥è¯¢è¯è¨åºç¡
4.1 åå¤æµè¯æ°æ®
1ï¼é¨é¨è¡¨ dept
å段å称 | æ°æ®ç±»å | æ¯å¦ä¸ºç©º | å¤æ³¨ |
---|---|---|---|
deptno | int | é¨é¨ç¼å·ï¼PKä¸»é® | |
dname | varchar(20) | Y | é¨é¨å称 |
loc | varchar(13) | Y | é¨é¨æå¨å°ç¹ |
#é¨é¨è¡¨
CREATE TABLE dept(
depton INT PRIMARY KEY AUTO_INCREMENT,#设置主é®ï¼èªå¨éå¢
dname VARCHAR(20),
loc VARCHAR(13),
);
INSERT INTO dept VALUES(NULL,'accounting','ä¸åº');
INSERT INTO dept VALUES(NULL,'research','äºåº');
INSERT INTO dept VALUES(NULL,'operations','äºåº');
2ï¼å工表 emp
å段å称 | æ°æ®ç±»å | æ¯å¦ä¸ºç©º | å¤æ³¨ |
---|---|---|---|
empno | int | åå·¥ç¼å·ï¼PKä¸»é® | |
ename | varchar(10) | Y | åå·¥å称 |
job | varchar(10) | Y | èä½ |
mgr | int | Y | ä¸çº§ç¼å· |
hiredate | datetime | Y | å ¥èæ¶é´ |
sal | double | Y | æå·¥èµ |
comm | NUMERIC(8,2) | Y | å¥é |
deptno | int | Y | æå±é¨é¨,FKå¤é® |
CREATE TABLE emp(
empno int primary key auto_increment,
ename VARCHAR(10),
job VARCHAR(10),
mgr int,
hiredate DATE,
sal double,
comm NUMERIC(7,2),#å¥é
deptno int
);
INSERT INTO emp VALUES(100,'jack','å¯æ»',NULL,'2002-05-1',90000,NULL,1);
INSERT INTO emp VALUES(200,'tony','æ»ç',100,'2015-02-02',10000,2000,2);
INSERT INTO emp VALUES(300,'hana','ç»ç',200,'2017-02-02',8000,1000,2);
INSERT INTO emp VALUES(400,'leo','åå·¥',300,'2019-02-22',3000,200.12,2);
INSERT INTO emp VALUES(500,'liu','åå·¥',300,'2019-03-19',3500,200.58,2);
4.2 åºç¡æ¥è¯¢
è¯æ³ï¼
SELECT è¦æ¥è¯¢çä¸è¥¿
FROM 表å;
â
类似äºJavaä¸ :System.out.println(è¦æå°çä¸è¥¿);
ç¹ç¹ï¼
- éè¿selectæ¥è¯¢å®çç»æ ï¼æ¯ä¸ä¸ªèæçè¡¨æ ¼ï¼ä¸æ¯çå®åå¨
- è¦æ¥è¯¢çä¸è¥¿ å¯ä»¥æ¯å¸¸éå¼ãå¯ä»¥æ¯è¡¨è¾¾å¼ãå¯ä»¥æ¯å段ãå¯ä»¥æ¯å½æ°
å符å½æ°
1ï¼LOWER
lower() --æ°æ®è½¬å°å
SELECT LOWER(å段å) FROM 表å;
SELECT dname,LOWER(dname) FROM dept;
dname LOWER(dname)
---------- --------------
accounting accounting
operations operations
research research
2ï¼UPPER
upper() --æ°æ®è½¬å¤§å
SELECT UPPER(å段å) FROM 表å;
SELECT dname,UPPER(dname) FROM dept;
dname UPPER(dname)
---------- --------------
accounting ACCOUNTING
operations OPERATIONS
research RESEARCH
3ï¼LENGTH
length() --æ°æ®çé¿åº¦ï¼åºå±ç¨äºUTF-8å符éï¼ä¸ä¸ªåæ¯ææ°åå 1åèï¼ä¸ä¸ªæ±åå 3åèï¼
SELECT LENGTH(å段å) FROM 表å;
SELECT dname,LENGTH(dname),loc,LENGTH(loc) FROM dept;
dname LENGTH(dname) loc LENGTH(loc)
---------- ------------- ------ -------------
accounting 10 ä¸åº 6
operations 10 äºåº 6
research 8 äºåº 6
4ï¼SUBSTR
substr(num1,num2) --æªåå串ä»num1å°num2æªåæ°æ®ï¼æ°æ®ä¸æ ä»1å¼å§
SELECT SUBSTR(å段å,num1,num2) FROM 表å;
SELECT dname,SUBSTR(dname,1,3) FROM dept;#ä»ç¬¬ä¸ä¸ªå符å¼å§æªåï¼æªååºæ¥3个å符
SELECT dname,SUBSTR(dname,2) FROM dept;#ä»ç¬¬äºä¸ªå符å¼å§é½æªåå®
SELECT dname,SUBSTR(dname,2,5) FROM dept;#ä»ç¬¬äºä¸ªå符å¼å§ï¼æªååºæ¥5个å符
SELECT dname,SUBSTR(dname,1,3),SUBSTR(dname,2),SUBSTR(dname,2,5) FROM dept;
dname SUBSTR(dname,1,3) SUBSTR(dname,2) SUBSTR(dname,2,5)
---------- ----------------- --------------- -------------------
accounting acc ccounting ccoun
operations ope perations perat
research res esearch esear
5ï¼CONCAT
connat() --æ¼æ¥å符串
select CONCAT(å段å,'è¦æ¼æ¥çå符串') from dept;
SELECT dname,CONCAT(dname,'123','ABC') FROM dept;#å¨dnameå段å±æ§åæ¼æ¥'123''ABC'
dname CONCAT(dname,'123','ABC')
---------- ---------------------------
accounting accounting123ABC
operations operations123ABC
research research123ABC
6ï¼REPLACE
replace() --å°æå®å符串æ¿æ¢
SELECT REPLACE(å段å,'æå®è¢«æ¿æ¢çå符串','æ¿æ¢çå符串') FROM 表å;
SELECT dname,REPLACE(dname,'a','666') FROM dept;#æaå符æ¿æ¢æ666
dname REPLACE(dname,'a','666')
---------- --------------------------
accounting 666ccounting
operations oper666tions
research rese666rch
7ï¼DISTINCT
distinct() --使ç¨distinctå ³é®åï¼å»é¤éå¤çè®°å½è¡
SELECT DISTINCT å段å FROM 表å;
SELECT loc FROM dept;
loc
-----------
ä¸åº
äºåº
äºåº
SELECT DISTINCT loc FROM dept;
loc
-----------
ä¸åº
äºåº
8ï¼\ 转ä¹å符
å° \ åçsqlè¯å¥ç¬¦å·è½¬ä¸ºå符
#' ä½ä¸ºsqlè¯å¥ç¬¦å·ï¼å
容ä¸åºç°åæå°±ä¼ä¹±å¥ï¼è¿è¡è½¬ä¹å³å¯
#åå¼å·æ¯ä¸ä¸ªSQLè¯å¥çç¹æ®å符
#select 'ab'cd' (è¿æ ·åä¼æ¥é)
#æ°æ®ä¸æåå¼å·æ¶,ç¨ä¸ä¸ª\转ä¹åææ®éå符
SELECT 'ab\'cd' ;#æ¾ç¤ºå符串ab'cd
trimå»ååæå®çç©ºæ ¼åå符
ltrimå»å·¦è¾¹ç©ºæ ¼
rtrimå»å³è¾¹ç©ºæ ¼
lpad左填å
rpadå³å¡«å
instrè¿åå串第ä¸æ¬¡åºç°çç´¢å¼
æ°å¦å½æ°
1ï¼ROUND
round() --æ°å¼åèäºå ¥ï¼å¹¶ä¿çnumä½
SELECT ROUND(å段å,num) FROM; 表å;#æ°å¼åèäºå
¥ï¼å¹¶ä¿çnumä½
SELECT comm,ROUND(comm) FROM emp;#ç´æ¥åèäºå
¥åæ´
comm ROUND(comm)
------- -------------
(NULL) (NULL)
2000.00 2000
1000.00 1000
200.12 200
200.58 201
SELECT comm,ROUND(comm,1) FROM emp;#åèäºå
¥å¹¶ä¿çä¸ä½å°æ°
comm ROUND(comm,1)
------- ---------------
(NULL) (NULL)
2000.00 2000.0
1000.00 1000.0
200.12 200.1
200.58 200.6
2ï¼CEIL
ceil() --æ°å¼åä¸åæ´
SELECT CEIL(å段å) FROM 表å;
SELECT comm,FLOOR(comm) FROM emp;
comm FLOOR(comm)
------- -------------
(NULL) (NULL)
2000.00 2000
1000.00 1000
200.12 200
200.58 200
3ï¼FLOOR
floor() --æ°å¼åä¸åæ´
SELECT CEIL(å段å) FROM 表å;
SELECT comm,FLOOR(comm) FROM emp;
comm FLOOR(comm)
------- -------------
(NULL) (NULL)
2000.00 2000
1000.00 1000
200.12 200
200.58 200
rand éæºæ°
modåä½
truncateæªæ
æ¥æå½æ°
1ï¼NOW
now() --å½åç³»ç»æ¥æ+æ¶é´
SELECT NOW();
NOW()
---------------------
2021-07-04 21:44:46
2ï¼CURDATE
curdate() --å½åç³»ç»æ¥æ
SELECT CURDATE();
CURDATE()
------------
2021-07-04
3ï¼CURTIME
curtime() --å½åç³»ç»æ¶é´
SELECT CURTIME();
CURTIME()
-----------
21:46:09
year() å¹´
month() æ
day() æ¥
hour() æ¶
minute() å
second() ç§
SELECT NOW(),
YEAR(NOW()),MONTH(NOW()),DAY(NOW()),
HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
NOW() YEAR(NOW()) MONTH(NOW()) DAY(NOW()) HOUR(NOW()) MINUTE(NOW()) SECOND(NOW())
------------------- ----------- ------------ ---------- ----------- ------------- ---------------
2021-07-04 21:46:58 2021 7 4 21 46 58
SELECT YEAR('1997-06-02 20:20:20') AS Y,
MONTH('1997-06-02 20:20:20') AS MON,
DAY('1997-06-02 20:20:20') AS D,
HOUR('1997-06-02 20:20:20') AS H,
MINUTE('1997-06-02 20:20:20') AS MIN,
SECOND('1997-06-02 20:20:20') AS S;
Y MON D H MIN S
------ ------ ------ ------ ------ --------
1997 6 2 20 20 20
4ï¼DATE_FORMAT
date_format æ¥ææ ¼å¼ï¼å°æ¥æ转æ¢æå符
#ç»è®¡2018年以åå
¥èçèåå·¥
SELECT * FROM emp WHERE DATE_FORMAT(hiredate,'%Y-%m-%d')<'2018-01-01';
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1
200 tony æ»ç 100 2015-02-02 10000 2000.00 2
300 hana ç»ç 200 2017-02-02 8000 1000.00 2
str_to_date å°å符转æ¢ææ¥æ
èåå½æ°
æ们ç»å¸¸éè¦æ±æ»æ°æ®èä¸ç¨æä»ä»¬çå®é æ£ç´¢åºæ¥ï¼ä¸ºæ¤SQLæä¾äºä¸é¨çå½æ°ã使ç¨è¿äºå½æ°ï¼SQLæ¥è¯¢å¯ç¨äºæ£ç´¢ï¼ä»¥ä¾¿åæåæ¥è¡¨çæ
AVG(ãDISTINCTã expr) è¿å expr çå¹³åå¼
COUNTï¼ãDISTINCTã exprï¼è¿å expr çé NULL å¼çæ°ç®
MIN(ãDISTINCTã expr) è¿å expr çæå°å¼
MAX(ãDISTINCTã expr) è¿å expr çæ大å¼
SUMï¼ãDISTINCTã exprï¼è¿å expr çæ»å
ââ
ç¹ç¹ï¼
- 以ä¸äºä¸ªåç»å½æ°é½å¿½ç¥nullå¼ï¼é¤äºcount(*)
- sumåavgä¸è¬ç¨äºå¤çæ°å¼å,maxãminãcountå¯ä»¥å¤çä»»ä½æ°æ®ç±»å
- é½å¯ä»¥æé distinct使ç¨ï¼ç¨äºç»è®¡å»éåçç»æ
- countçåæ°å¯ä»¥æ¯æï¼å段ã* ã常éå¼ï¼ä¸è¬æ¾1,å»ºè®®ä½¿ç¨ count(*)
#èåææåå·¥èªæ°´
SELECT MAX(sal),MIN(sal),SUM(sal),AVG(sal) FROM emp;
#maxæå¤§å¼ minæå°å¼ sumæ±å avgå¹³åæ°
max(sal) MIN(sal) SUM(sal) AVG(sal)
-------- -------- -------- ----------
90000 3000 114500 22900
#count 个æ°
SELECT COUNT(*) FROM emp #ä½æ
SELECT COUNT(1) FROM emp #é«æ
COUNT(1)
----------
5
SELECT COUNT(empno) FROM emp
COUNT(empno)
--------------
5
SELECT COUNT(comm) FROM emp #æç
§å段åç»è®¡ä¸ªæ°ï¼å¦æå段å¼æ¯nullå°ä¸åç»è®¡
COUNT(comm)
-------------
4
ç¨ count(*)ï¼count(1)ï¼è°å¥½å¢?
å ¶å®,å¯¹äº myisam å¼æç表,没æåºå«çãè¿ç§å¼æå é¨æä¸è®¡æ°å¨å¨ç»´æ¤çè¡æ°ã
Innodb ç表ï¼ç¨ count(*)ç´æ¥è¯»è¡æ°ï¼æçå¾ä½ , å 为 innodb ççè¦å»æ°ä¸é.
4.3 æ¡ä»¶æ¥è¯¢
æ¡ä»¶æ¥è¯¢ï¼æ ¹æ®æ¡ä»¶è¿æ»¤åå§è¡¨çæ°æ®ï¼æ¥è¯¢å°æ³è¦çæ°æ®
â
è¯æ³ï¼
SELECT
è¦æ¥è¯¢çå段|表达å¼|常éå¼|å½æ°
FROM
表
WHERE
æ¡ä»¶ ;
â
åç±»ï¼
ä¸ãæ¡ä»¶è¡¨è¾¾å¼
示ä¾ï¼salary>10000
æ¡ä»¶è¿ç®ç¬¦ï¼
< >= <= = != <>
â
äºãé»è¾è¡¨è¾¾å¼
示ä¾ï¼salary>10000 && salary<20000
é»è¾è¿ç®ç¬¦ï¼
- andï¼&&ï¼:两个æ¡ä»¶å¦æåæ¶æç«ï¼ç»æ为trueï¼å¦å为false
- or(||)ï¼ä¸¤ä¸ªæ¡ä»¶åªè¦æä¸ä¸ªæç«ï¼ç»æ为trueï¼å¦å为false
not(!)ï¼å¦ææ¡ä»¶æç«ï¼ånotå为falseï¼å¦å为true
â
ä¸ã模ç³æ¥è¯¢
示ä¾ï¼last_name like âa%â
1ï¼WHERE
where() --ç¨æ¥è¿æ»¤æ°æ®(注æ:whereä¸ä¸è½ä½¿ç¨åå«å!!)
SELECT *(表å
)/å段å(å段å
)
FROM 表å
WHERE æ¡ä»¶;
#SQLçæ§è¡é¡ºåº from where select
#æ¥è¯¢é¨é¨ç¼å·=1çè®°å½
SELECT * FROM dept WHERE deptno = 1; #åªæ¥ä¸æ¡--é«æ
deptno dname loc
------ ---------- --------
1 accounting ä¸åº
#æ¥è¯¢å¨äºåºççé¨é¨
SELECT * FROM dept WHERE loc = "äºåº";
deptno dname loc
------ ---------- --------
3 operations äºåº
2 research äºåº
#æ¥è¯¢å¨ä¸åºçç¼å·æ¯1çé¨é¨å称
SELECT dnameFROM dept WHERE loc = "ä¸åº" AND depton = 1;#and é«æ
dname
----------
accounting
#æ¥è¯¢å¨ä¸åºçé¨é¨æè
ç¼å·æ¯3çé¨é¨å称#or
SELECT dname FROM dept WHERE loc = "ä¸åº" OR deptno = 3; #or ä½æ
dname
------------
accounting
operations
2ï¼LIKE
like --模ç³æ¥è¯¢ï¼å ¶ä¸éé 符%代表0å°n个å符ï¼éé 符ä¸å线_代表1个å符
#like 模ç³çæ¡ä»¶%å ä½ç¬¦å¹é
0~N个å符
SELECT * FROM 表å WHERE å段å LIKE 'xx%'; #以xxå¼å¤´çé¨é¨
SELECT * FROM 表å WHERE å段å LIKE '%o%';#模ç³çæ¡ä»¶ï¼æ¥è¯¢å
容éå
å«xxçé¨é¨
SELECT * FROM 表å WHERE å段å LIKE '%ch'; #以xxç»å°¾çé¨é¨
#æç¡®çæ¡ä»¶ï¼æ¥è¯¢å称为accountingçé¨é¨
SELECT * FROM dept WHERE dname = 'accounting';
deptno dname loc
------ ---------- --------
1 accounting ä¸åº
#æ¥è¯¢ä»¥chç»å°¾çé¨é¨
SELECT * FROM dept WHERE dname LIKE '%ch';
deptno dname loc
------ -------- --------
2 research äºåº
#æ¥è¯¢å¨ä¸åºçé¨é¨æè
å称å
å«tingçé¨é¨
SELECT * FROM dept WHERE loc="ä¸åº" OR dname LIKE '%ting%';
deptno dname loc
------ ---------- --------
1 accounting ä¸åº
3ï¼NULL
is null --è¿æ»¤å段å¼ä¸ºç©ºçæ°æ®
is not null --è¿æ»¤å段å¼ä¸ä¸ºç©ºçæ°æ®
select * from 表å where å段å is null --è¿æ»¤å段å¼ä¸ºç©ºçæ°æ®
select * from 表å where å段å is not null --è¿æ»¤å段å¼ä¸ä¸ºç©ºçæ°æ®
#æ¥è¯¢comm æ¯ç©ºçåå·¥çä¿¡æ¯
SELECT * FROM emp WHERE comm IS NULL;
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------ --------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1
#æ¥è¯¢comm ä¸ä¸ºç©ºçåå·¥çä¿¡æ¯
SELECT * FROM emp WHERE comm IS NOT NULL;
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
200 tony æ»ç 100 2015-02-02 10000 2000.00 2
300 hana ç»ç 200 2017-02-02 8000 1000.00 2
400 leo åå·¥ 300 2019-02-22 3000 200.12 2
500 liu åå·¥ 300 2019-03-19 3500 200.58 2
4ï¼IFNULL
å¨SQLä¸nullä¸åä¸è¿ç®ï¼è¿ç®ä¸åºç°nullå¼å°±ä¸ºnullï¼éè¦ä½¿ç¨ifnull(å段å,转æ¢å¼)è¿è¡è½¬æ¢
#æ¥è¯¢æ¯ä¸ªåå·¥çæèª
SELECT * , sal + comm FROM emp;
#å¥é为null æèªä¸ä¸ºnull ç¸å åå为äºnullï¼æ°æ®åºç°äºé误
empno ename job mgr hiredate sal comm deptno sal + comm
------ ------ ------ ------ ---------- ------ ------- ------ ------------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1 (NULL)
200 tony æ»ç 100 2015-02-02 10000 2000.00 2 12000
300 hana ç»ç 200 2017-02-02 8000 1000.00 2 9000
400 leo åå·¥ 300 2019-02-22 3000 200.12 2 3200.12
500 liu åå·¥ 300 2019-03-19 3500 200.58 2 3700.58
#æ¹è¿
SELECT *, sal + IFNULL(comm,0) FROM emp;
#nullä¸åä¸è¿ç®ï¼éè¦ç¹æ®å¤ç
empno ename job mgr hiredate sal comm deptno sal + ifnull(comm,0)
------ ------ ------ ------ ---------- ------ ------- ------ ----------------------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1 90000
200 tony æ»ç 100 2015-02-02 10000 2000.00 2 12000
300 hana ç»ç 200 2017-02-02 8000 1000.00 2 9000
400 leo åå·¥ 300 2019-02-22 3000 200.12 2 3200.12
500 liu åå·¥ 300 2019-03-19 3500 200.58 2 3700.58
5ï¼BETWEEN AND
between æ¡ä»¶1 and æ¡ä»¶2 --å¨æ¡ä»¶1åæ¡ä»¶2ä¹é´æ¥è¯¢
SELECT * FROM 表å WHERE å段å BETWEEN æ¡ä»¶1 AND æ¡ä»¶2;
#æ¥è¯¢å·¥èµ(5000,10000)çå工信æ¯
SELECT * FROM emp WHERE SAL>5000 AND SAL<10000;
#çæäº
SELECT * FROM emp WHERE SAL BETWEEN 5000 AND 10000;
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
300 hana ç»ç 200 2017-02-02 8000 1000.00 2
6ï¼LIMIT
limit --å¨mysqlä¸ï¼éè¿limitè¿è¡å页æ¥è¯¢ã
ä¾å¦ï¼åæ°æé«çè®°å½<æåæ°æåºåï¼limit nï¼è¿åånæ¡ã
SELECT * FROM 表å LIMIT num;#ä»è¡¨ä¸ånumè¡æ°æ®
SELECT * FROM 表å LIMIT num1,num2;#ä»è¡¨ä¸num1è¡å¼å§å,ånum2è¡æ°æ®
SELECT * FROM emp LIMIT 2;#åå两æ¡
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1
200 tony æ»ç 100 2015-02-02 10000 2000.00 2
SELECT * FROM emp LIMIT 1,3;#ä»1å¼å§ï¼ç¬¬2æ¡è®°å½ï¼å¼å§ï¼åä¸æ¡è®°å½
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
200 tony æ»ç 100 2015-02-02 10000 2000.00 2
300 hana ç»ç 200 2017-02-02 8000 1000.00 2
400 leo åå·¥ 300 2019-02-22 3000 200.12 2
æµç¨æ§å¶å½æ°
if å¤çååæ¯
caseè¯å¥ å¤çå¤åæ¯
æ åµ1ï¼å¤ççå¼å¤æ
æ åµ2ï¼å¤çæ¡ä»¶å¤æ
4.4 æåºæ¥è¯¢
è¯æ³ï¼
SELECT
è¦æ¥è¯¢çä¸è¥¿
FROM
表
WHERE
æ¡ä»¶
ORDER BY æåºçå段|表达å¼|å½æ°|å«å ãasc | descã;
ORDER BY
order by â æåº
- ASC ååºï¼é»è®¤çï¼
- DESC éåº
#order by æåº ååºï¼é»è®¤çï¼ãéåº
#æç
§å
¥èæ¥ææåºï¼é»è®¤ååº ASCå¯ä¸å
SELECT * FROM emp WHERE hiredate < '2018-1-1' ORDER BY hiredate ASC;
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1
200 tony æ»ç 100 2015-02-02 10000 2000.00 2
300 hana ç»ç 200 2017-02-02 8000 1000.00 2
500 liu åå·¥ 300 2019-03-19 3500 200.58 2
400 leo åå·¥ 300 2019-02-22 3000 200.12 2
#ç»è®¡2015年以åå
¥èçèåå·¥ï¼é»è®¤ååº
SELECT * FROM emp WHERE hiredate < '2018-1-1' ORDER BY hiredate;
empno ename job mgr hiredate sal comm deptno
------ ------ ------ ------ ---------- ------ ------- --------
100 jack å¯æ» (NULL) 2002-05-01 90000 (NULL) 1
200 tony æ»ç 100 2015-02-02 10000 2000.00 2
300 hana ç»ç 200 2017-02-02 8000 1000.00 2
#æ¥è¯¢æ¯ä¸ªåå·¥å
¥èäºå å¹´ï¼å¹¶æéåºæå
SELECT ename,YEAR(NOW())-YEAR(hiredate) AS working_age FROM emp ORDER BY YEAR(NOW())-YEAR(hiredate) DESC;
ename working_age
------ -------------
jack 19
tony 6
hana 4
leo 2
liu 2
4.5 åç»æ¥è¯¢
ç¨äºå¯¹æ¥è¯¢çç»æè¿è¡åç»ç»è®¡
â
è¯æ³
SELECT
æ¥è¯¢çå段ï¼åç»å½æ°
FROM
表
GROUP BY åç»çå段;
â
ç¹ç¹ï¼
1ãå¯ä»¥æå个å段åç»
2ãååç»å½æ°ä¸åæ¥è¯¢çå段æ好æ¯åç»åçå段
3ãåç»çé
- é对ç表 ä½ç½® å ³é®å
- åç»åçéï¼ åå§è¡¨ group byçåé¢ where
- åç»åçéï¼ åç»åçç»æé group byçåé¢ having
4ãå¯ä»¥æå¤ä¸ªå段åç»ï¼å段ä¹é´ç¨éå·éå¼
5ãå¯ä»¥æ¯ææåº
6ãhavingåå¯ä»¥æ¯æå«å
GROUP BY
ç¨äºå¯¹æ¥è¯¢çç»æè¿è¡åç»ç»è®¡group by表示åç», having åå¥ç±»ä¼¼whereè¿æ»¤è¿åçç»æ
å ³äº mysql ç group by çç¹æ®ï¼
- å¨ SELECT å表ä¸æææªå å«å¨ç»å½æ°ä¸çåé½åºè¯¥æ¯å å«å¨ GROUP BY åå¥ä¸çï¼æ¢å¥è¯è¯´ï¼SELECT å表ä¸æ好ä¸è¦åºç° GROUP ã
- å¦ææ¥è¯¢æ¶ï¼åºç°äºèåååéèååï¼é常è¦æç §éèåååç»
#ç»è®¡ æ¯ä¸ªèä½ç人æ°
SELECT COUNT(1) FROM emp GROUP BY job;
job COUNT(1)
------ ----------
å¯æ» 1
æ»ç 1
ç»ç 1
åå·¥ 2
#æ¥è¯¢ æ¯ç§å²ä½çå¹³åå·¥èµåå²ä½å称
SELECT AVG(sal),job FROM emp GROUP BY job;#æéèåååç»
AVG(sal) job
-------- --------
90000 å¯æ»
10000 æ»ç
8000 ç»ç
3250 åå·¥
#æ¥è¯¢ æ¯ä¸ªå²ä½çå¹³åå·¥èµ åè¿æ»¤åº<10000ç
SELECT job,AVG(sal)
FROM emp
#å¯ä»¥åç»åè¿æ»¤ç¨whereï¼ä½æ¯whereéä¸è½åºç°èåå½æ°
#åç»ä¹åéè¦è¿æ»¤ï¼ä½¿ç¨where --é«æ
#WHERE AVG(sal)<10000 (è¿è¡æ¥é Invalid use of group function)
GROUP BY job;
#åç»åéè¦è¿æ»¤ï¼ä½¿ç¨having --ç¸å¯¹ä½æ
HAVING AVG(sal)>10000;
job avg(sal)
------ ----------
ç»ç 8000
åå·¥ 3250
5. 约æ ï¼CONSTRAINTSï¼
å段约æ
ââæ°æ®å®æ´æ§ï¼Data Integrityï¼æ¯ææ°æ®ç精确æ§ï¼Accuracyï¼åå¯é æ§ï¼Reliabilityï¼ãå®æ¯åºé²æ¢æ°æ®åºä¸åå¨ä¸ç¬¦åè¯ä¹è§å®çæ°æ®åé²æ¢å é误信æ¯çè¾å ¥è¾åºé ææ ææä½æé误信æ¯èæåºçãæ°æ®çå®æ´æ§è¦ä»ä»¥ä¸å个æ¹é¢èèï¼
-
å®ä½å®æ´æ§ï¼Entity Integrityï¼
ä¾å¦ï¼åä¸ä¸ªè¡¨ä¸ï¼ä¸è½åå¨ä¸¤æ¡å®å ¨ç¸åæ æ³åºåçè®°å½
-
åå®æ´æ§ï¼Domain Integrityï¼
ä¾å¦ï¼å¹´é¾èå´ 0-120ï¼æ§å«èå´âç·/女â
-
å¼ç¨å®æ´æ§ï¼Referential Integrityï¼
ä¾å¦ï¼åå·¥æå¨é¨é¨ï¼å¨é¨é¨è¡¨ä¸è¦è½æ¾å°è¿ä¸ªé¨é¨
-
ç¨æ·èªå®ä¹å®æ´æ§ï¼User-defined Integrityï¼
ä¾å¦ï¼ç¨æ·åå¯ä¸ãå¯ç ä¸è½ä¸ºç©ºçï¼æ¬é¨é¨ç»ççå·¥èµä¸å¾é«äºæ¬é¨é¨èå·¥çå¹³åå·¥èµç 5 åã
æ ¹æ®çº¦æçç¹ç¹ï¼å为å ç§ï¼
- é®çº¦æï¼ä¸»é®çº¦æãå¤é®çº¦æãå¯ä¸é®çº¦æ
- Not NULL 约æï¼é空约æ
- Check 约æï¼æ£æ¥çº¦æ
- Default 约æï¼ç¼ºç约æ
主é®çº¦æ primary key
主é®ï¼ Primary keyï¼ç®ç§° PKï¼æ°æ®åºä¸»é®ä½ç¨ä¿è¯å®ä½çå®æ´æ§ï¼å¯ä»¥æ¯ä¸ä¸ªåæå¤åçç»åã
主é®çº¦æï¼ å¦æ为ä¸ä¸ªåæ·»å äºä¸»é®çº¦æï¼é£ä¹è¿ä¸ªåå°±æ¯ä¸»é®ï¼ä¸»é®çç¹ç¹æ¯å¯ä¸ä¸ä¸è½ä¸ºç©ºãé常æ åµä¸ï¼æ¯å¼ 表é½ä¼æ主é®ã
主é®èªå¢çç¥ï¼ å½ä¸»é®ä¸ºæ°å¼ç±»åæ¶ï¼ä¸ºäºæ¹ä¾¿ç»´æ¤ï¼å¯ä»¥è®¾ç½®ä¸»é®èªå¢çç¥ï¼auto_incrementï¼ï¼è®¾ç½®äºä¸»é®èªå¢çç¥åï¼æ°æ®åºä¼å¨è¡¨ä¸ä¿åä¸ä¸ªAUTO_INCREMENTåéå¼ï¼åå§å¼ä¸º1ï¼å½éè¦idå¼ï¼ä¸éè¦æ们æå®å¼ï¼ç±æ°æ®åºè´è´£ä»AUTO_INCREMENTè·åä¸ä¸ªidå¼ï¼ä½ä¸ºä¸»é®å¼æå ¥å°è¡¨ä¸ãèä¸æ¯æ¬¡ç¨å®AUTO_INCREMENTå¼ï¼é½ä¼èªå¢1ã
设置主é®ä¸æ¥çæ个表ç约æåç´¢å¼
SELECT * FROM information_schema.table_constraints WHERE table_name = '表å称';
SHOW INDEX FROM 表å称;
SHOW CREATE TABLE 表å;
SHOW INDEX FROM 表å称;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Visible Expression
------ ---------- ----------- ------------ ----------- --------- ----------- -------- ------ ------ ---------- ------- ------------- ------- ------------
dept 0 PRIMARY 1 deptno A 5 (NULL) (NULL) BTREE YES (NULL)
dept 1 dname_index 1 dname A 4 (NULL) (NULL) YES BTREE YES (NULL)
dept 1 fuhe 1 dname A 4 (NULL) (NULL) YES BTREE YES (NULL)
dept 1 fuhe 2 loc A 4 (NULL) (NULL) YES BTREE YES (NULL)
SHOW CREATE TABLE 表å;
Table Create Table
------ -----------------------------------------------------------------------
dept CREATE TABLE `dept` (
`deptno` int NOT NULL AUTO_INCREMENT,
`dname` varchar(20) DEFAULT NULL,
`loc` varchar(13) DEFAULT NULL,
PRIMARY KEY (`deptno`),
KEY `dname_index` (`dname`),
KEY `fuhe` (`dname`,`loc`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3
å¦ä½å é¤ä¸»é®ï¼
å é¤ä¸»é®çº¦æï¼ä¸éè¦æå®ä¸»é®åï¼ä¸ä¸ªè¡¨åªæä¸ä¸ªä¸»é®
alter table 表å称 drop
æ·»å 主é®çº¦æï¼ä¾å¦å°id设置为主é®ï¼
#主é®æ¯ä¸æ¡è®°å½çå¯ä¸æ è¯ï¼å
·æå¯ä¸æ§ï¼ä¸è½éå¤
DROP TABLE IF EXISTS tb_user; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
CREATE TABLE tb_user(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
PRIMARY KEY (id)
);
INSERT INTO tb_user (id,NAME) VALUES(1,'tony');
INSERT INTO tb_user (id,NAME) VALUES(1,'hellen');
#第äºå¥æå
¥å°±ä¼æ¥éï¼æ示主é®1çå¼å·²ç»åå¨ï¼éå¤äº
Query : INSERT INTO tb_user (id,NAME) VALUES(1,'hellen')
Error Code : 1062
Duplicate entry '1' for key 'PRIMARY'
- 主é®çº¦æç¸å½äºå¯ä¸çº¦æ+é空约æçç»åï¼ä¸»é®çº¦æåä¸å 许éå¤ï¼ä¹ä¸å 许åºç°ç©ºå¼ï¼å¦ææ¯å¤åç»åç主é®çº¦æï¼é£ä¹è¿äºåé½ä¸å 许为空å¼ï¼å¹¶ä¸ç»åçå¼ä¸å 许éå¤ã
- æ¯ä¸ªè¡¨æä¸æå¤åªå 许ä¸ä¸ªä¸»é®çº¦æã
- MySQL ç主é®åæ»æ¯ PRIMARYï¼å°±ç®èªå·±å½åäºä¸»é®çº¦æåä¹æ²¡ç¨ã
- å½å建主é®çº¦ææ¶ï¼MySQL é»è®¤å¨å¯¹åºçåä¸å»ºç«ä¸»é®ç´¢å¼ãå é¤ä¸»é®æ¶ï¼ä¹ä¼ç´æ¥å é¤ä¸»é®ç´¢å¼ã
å¤é®çº¦æ forgrein key
å¤é®çº¦æï¼Foreign keyï¼ ç®ç§° FKãå¤é®çº¦ææ¯ä¿è¯ä¸ä¸ªæ两个表ä¹é´çåç §å®æ´æ§ï¼å¤é®æ¯æ建äºä¸ä¸ªè¡¨ç两个å段ææ¯ä¸¤ä¸ªè¡¨ç两个å段ä¹é´çåç §å ³ç³»ï¼ä½¿ç¨å ³é®åreferencesè¿è¡è¿æ¥ã
- å¨å建å¤é®çº¦ææ¶ï¼å¦æä¸ç»å¤é®çº¦æå称ï¼é»è®¤åä¸æ¯ååï¼èæ¯èªå¨äº§çä¸ä¸ªå¤é®åï¼ä¾å¦ student_ibfk_1ï¼ï¼ï¼ä¹å¯ä»¥æå®å¤é®çº¦æåã
- å½å建å¤é®çº¦ææ¶ï¼ç³»ç»é»è®¤ä¼å¨æå¨çåä¸å»ºç«å¯¹åºçæ®éç´¢å¼ãä½æ¯ç´¢å¼åæ¯ååï¼ä¸æ¯å¤é®ç约æå
- å é¤å¤é®æ¶ï¼å ³äºå¤é®åä¸çæ®éç´¢å¼éè¦åç¬å é¤ã
注æï¼
- å¨ä»è¡¨ä¸å»ºç«å¤é®ï¼èä¸ä¸»è¡¨è¦å åå¨ã
- ä»è¡¨çå¤é®åï¼å¨ä¸»è¡¨ä¸å¼ç¨çåªè½æ¯é®åï¼ä¸»é®ï¼å¯ä¸é®ï¼å¤é®ï¼ã
- ä»è¡¨çå¤é®åä¸ä¸»è¡¨è¢«åç §çåååå¯ä»¥ä¸ç¸åï¼ä½æ¯æ°æ®ç±»åå¿ é¡»ä¸æ ·
- ä¸ä¸ªè¡¨å¯ä»¥å»ºç«å¤ä¸ªå¤é®çº¦æ
- ä»è¡¨çå¤é®å¼å¿ é¡»"å¨ä¸»è¡¨ä¸è½æ¾å°"æè 为空ï¼ä»è约æäºä»è¡¨çå¤é®åçå¼çæ·»å åä¿®æ¹ã
- å½ä¸»è¡¨çè®°å½è¢«ä»è¡¨åç §æ¶ï¼ä¸»è¡¨ä¸è¢«åèè®°å½çå é¤åæ´æ°ä¹ä¼åå°éå¶ã
- é»è®¤æ åµä¸ï¼ä¸»è¡¨åä»è¡¨æ¯ä¸¥æ ¼ä¾èµå ³ç³» RESTRICTãå½ä¸»è¡¨çè®°å½è¢«ä»è¡¨åç §æ¶ï¼ä¸»è¡¨çè®°å½å°ä¸å 许å é¤ï¼å¦æè¦å é¤æ°æ®ï¼éè¦å å é¤ä»è¡¨ä¸ä¾èµè¯¥è®°å½çæ°æ®ï¼ç¶åæå¯ä»¥å é¤ä¸»è¡¨çæ°æ®ã
- ä½æ¯æä¸ç§æ¯çº§èâä¿®æ¹ãå é¤âï¼
- ON DELETE SET NULL(级è置空)ï¼å½å¤é®è®¾ç½®äº SET NULL,å½ä¸»è¡¨çç¸å ³è®°å½å é¤æ¶ï¼ä»è¡¨å¯¹åºçå段æ¹ä¸ºNULLã注æä»è¡¨å¤é®å段å¾å 许为空æè¡
- ON DELETE CASCADE(级èå é¤)ï¼å½å¤é®è®¾ç½®äº CASCADEï¼çº§èï¼ï¼å½ä¸»è¡¨çç¸å ³è®°å½å é¤æ¶ï¼ä»è¡¨å¯¹åºçè¡é½å é¤äºã
- 对äºå¤é®çº¦æ,æ好æ¯éç¨: ON UPDATE CASCADE ON DELETE RESTRICT çæ¹å¼ã
- å¦æè¦å é¤è¡¨ï¼éè¦å å é¤ä»è¡¨ï¼æè½å é¤ä¸»è¡¨ã
DROP TABLE IF EXISTS tb_user_address; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
DROP TABLE IF EXISTS tb_user; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
CREATE TABLE tb_user (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, #èªå¢ä¸»é®
NAME VARCHAR(50) NOT NULL UNIQUE, #é空ï¼å¯ä¸ç´¢å¼
sex CHAR(2) DEFAULT 'ç·', #é»è®¤å¼
phone CHAR(18),
age INT,
CHECK (age>0 AND age<=200),#checkæ ¸æ¥ ageçæ°æ®éè¦å¤§äº0å°äº200
);
CREATE TABLE tb_user_address (
user_id INT PRIMARY KEY NOT NULL,
address VARCHAR(200),
#tb_user_addressä¸user_idå段å½å
¥tb_user表ä¸åå¨ç主é®å¼ï¼å°æ¥é
FOREIGN KEY(user_id) REFERENCES tb_user(id)
);
DESC tb_user;
å¦ä½å é¤å¤é®çº¦æï¼
ALTER TABLE 表å称 DROP FOREIGN KEY å¤é®çº¦æå;
ALTER TABLE t_emp DROP FOREIGN KEY fk_emp_dept_did;
â
å¦ä½å é¤å¤é®åä¸çç´¢å¼ï¼
ALTER TABLE 表å称 DROP INDEX å¤é®åç´¢å¼å;
ALTER TABLE t_emp DROP
å¯ä¸çº¦æ unique
å¯ä¸çº¦æï¼ Unique keyï¼ç®ç§° UKï¼å¦æ为ä¸ä¸ªåæ·»å äºå¯ä¸çº¦æï¼é£ä¹è¿ä¸ªåçå¼å°±å¿ é¡»æ¯å¯ä¸çï¼å³ä¸è½éå¤ï¼ï¼ä½å¯ä»¥ä¸ºç©ºã
- åä¸ä¸ªè¡¨å¯ä»¥æå¤ä¸ªå¯ä¸çº¦æã
- å¯ä¸çº¦æå¯ä»¥æ¯æä¸ä¸ªåçå¼å¯ä¸ï¼ä¹å¯ä»¥å¤ä¸ªåç»åå¼çå¯ä¸ã
- MySQL ä¼ç»å¯ä¸çº¦æçåä¸é»è®¤å建ä¸ä¸ªå¯ä¸ç´¢å¼ã
- å é¤å¯ä¸é®åªè½éè¿å é¤å¯ä¸ç´¢å¼çæ¹å¼å é¤ï¼å é¤æ¶éè¦æå®å¯ä¸ç´¢å¼åï¼å¯ä¸ç´¢å¼åå°±æ¯å¯ä¸çº¦æåä¸æ ·ã
ââå¦æå建å¯ä¸çº¦ææ¶æªæå®å称ï¼å¦ææ¯ååï¼å°±é»è®¤åååç¸åï¼å¦ææ¯ç»ååï¼é£ä¹é»è®¤å()ä¸æå¨ç¬¬ä¸ä¸ªçååç¸åãä¹å¯ä»¥èªå®ä¹å¯ä¸æ§çº¦æåã
å¦ä½å é¤å¯ä¸æ§çº¦æï¼
ALTER TABLE 表å称 DROP INDEX å¯ä¸æ§çº¦æå;
注æï¼å¦æå¿è®°å称ï¼å¯ä»¥éè¿æ¥ç表ç约ææç´¢å¼çæ¹å¼æ¥ç
æ·»å å¯ä¸çº¦æï¼ä¾å¦ä¸ºusernameæ·»å å¯ä¸çº¦æåé空约æï¼
ââNameå段å建äºå¯ä¸çº¦æï¼æå ¥æ°æ®æ¶æ°æ®åºä¼è¿è¡æ£æ¥ï¼å¦ææå ¥çå¼ç¸åï¼å°±ä¼æ£æ¥æ¥éï¼
DROP TABLE IF EXISTS tb_user; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
CREATE TABLE tb_user(
id INT,
NAME VARCHAR(30) UNIQUE NOT NULL,--å¯ä¸çº¦æä¸é空
phone VARCHAR(20) UNIQUE NOT NULL,--å¯ä¸çº¦æä¸é空
email VARCHAR(30) UNIQUE NOT NULL,--å¯ä¸çº¦æä¸é空
PRIMARY KEY (id)
);
DESC tb_user;
INSERT INTO tb_user (id,NAME) VALUES(1,'tony');--NAMEçå¼è¦å¯ä¸,éå¤ä¼æ¥éç
INSERT INTO tb_user (id,NAME) VALUES(2,'tony');
#æ§è¡ä¸é¢è¯å¥åºéï¼
Query : INSERT INTO tb_user (id,NAME) VALUES(2,'tony')
Error Code : 1062
Duplicate entry 'tony' for key 'name'
#å±ç¤ºè¡¨ç»æï¼
DESC tb_user;
主é®åå¯ä¸é®çåºå«ï¼
ï¼1ï¼ä¸»é®æ¯é空ï¼å¯ä¸é®å 许空
ï¼2ï¼ä¸»é®ä¸ä¸ªè¡¨åªè½ä¸ä¸ªï¼å¯ä¸é®å¯ä»¥æå¤ä¸ª
é空约æ not null
é空约æï¼ å¦æ为ä¸ä¸ªåæ·»å äºé空约æï¼é£ä¹è¿ä¸ªåçå¼å°±ä¸è½ä¸ºç©ºï¼ä¸ºç©ºä¼æ¥éï¼ä½å¯ä»¥éå¤ã
DROP TABLE IF EXISTS tb_user; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
CREATE TABLE tb_user(
id INT AUTO_INCREMENT,
NAME VARCHAR(30) UNIQUE NOT NULL,
age INT,
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(30) UNIQUE NOT NULL,
PRIMARY KEY (id)
);
DESC tb_user;
#id为èªå¢ä¸»é®ï¼nullå¼æ æï¼æ°æ®åºä¼èªå¨ç¨ä¸ä¸ä¸ªidå¼æ¿ä»£
#ageå 为è¿è¡ä¸ºnullï¼æ以å¯ä»¥è®¾ç½®ä¸ºnull
INSERT INTO tb_user (id,age) VALUES(NULL,NULL);
*********************************************************************************
create table user(
id int primary key auto_increment,
password varchar(50) not null
);
show tables;
insert into user values(null,null);//ä¸ç¬¦åé空约æ
insert into user values(null,123;);//OK
æ£æ¥çº¦æ check
注æï¼ MySQL ä¸æ¯æ check 约æï¼ä½å¯ä»¥ä½¿ç¨ check 约æï¼è没æä»»ä½ææã
ä¾å¦ï¼age tinyint check(age >20) æ sex char(2) check(sex in(âç·â,â女â))
DROP TABLE IF EXISTS tb_user; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
CREATE TABLE tb_user (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, #èªå¢ä¸»é®
NAME VARCHAR(50) NOT NULL UNIQUE, #é空ï¼å¯ä¸ç´¢å¼
sex CHAR(2) DEFAULT 'ç·', #é»è®¤å¼
phone CHAR(18),
age INT,
CHECK (age>0 AND age<=200),#å½å
¥ageè¶
è¿200å°æ¥é
createdTime DATE DEFAULT NOW()
);
DESC tb_user;
é»è®¤çº¦æ default
é»è®¤çº¦æï¼ defaultï¼é»è®¤å¼ï¼å¨æå ¥æ°æ®æ¶æåå¦æ没æå®å ¶ä»çå¼ï¼é£ä¹ä¼å°é»è®¤å¼æ·»å å°æ°è®°å½ã
é»è®¤å¼
DROP TABLE IF EXISTS tb_user; #å¦æ表åå¨åå é¤ï¼æ
ç¨ä¼ä¸¢å¤±æ°æ®
CREATE TABLE tb_user (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, #èªå¢ä¸»é®
NAME VARCHAR(50) NOT NULL UNIQUE, #é空ï¼å¯ä¸ç´¢å¼
sex CHAR(2) DEFAULT 'ç·', #default é»è®¤å¼ å¦æä¸æ·»å æå®å¼å°±é»è®¤æ·»å æ°æ® âç·â
phone CHAR(18),
age INT,
createdTime DATE DEFAULT NOW()
);
DESC tb_user;
èªå¢åï¼AUTO_INCREMENTï¼
CREATE TABLE t_stu(
sid INT PRIMARY KEY AUTO_INCREMENT, #ç»ä¸»é®è®¾ç½®èªå¢é®
sname VARCHAR(100) NOT NULL,
gender CHAR NOT NULL DEFAULT 'ç·',
birthday DATE, address VARCHAR(200)
);
å ³äºèªå¢é¿ auto_incrementï¼
- æ´æ°ç±»åçå段æå¯ä»¥è®¾ç½®èªå¢é¿ã
- å½éè¦äº§çå¯ä¸æ è¯ç¬¦æ顺åºå¼æ¶ï¼å¯è®¾ç½®èªå¢é¿ã
- ä¸ä¸ªè¡¨æå¤åªè½æä¸ä¸ªèªå¢é¿å
- èªå¢é¿åå¿ é¡»é空
- èªå¢é¿åå¿ é¡»æ¯ä¸»é®åæå¯ä¸é®åã
- InnoDB 表çèªå¨å¢é¿åå¯ä»¥æå¨æå ¥ï¼ä½æ¯æå ¥çå¼å¦ææ¯ç©ºæè 0ï¼åå®é æå ¥çå°æ¯èªå¨å¢é¿åçå¼ã
ç´¢å¼ index
å®ä¹
ââç´¢å¼ï¼ç´¢å¼æ¯å¯¹æ°æ®åºè¡¨ä¸ä¸åæå¤åçå¼è¿è¡æåºçä¸ç§ç»æï¼æ¯ä¸ç§æ好åºçå¿«éæ¥æ¾çæ°æ®ç»æãç´¢å¼æ¯ä¸ä¸ªåç¬çãç©ççæ°æ®åºç»æï¼å®å¸®å©æ°æ®åºé«æçè¿è¡æ°æ®çæ£ç´¢ãå®æ¯æ个表ä¸ä¸åæè¥å¹²åå¼çéååç¸åºçæå表ä¸ç©çæ è¯è¿äºå¼çæ°æ®é¡µçé»è¾æéæ¸ åãå¨æ°æ®ä¹å¤ï¼æ°æ®åºç³»ç»è¿ç»´æ¤ç满足ç¹å®æ¥æ¾ç®æ³çæ°æ®ç»æï¼é¢å¤çåå¨ç©ºé´ï¼ï¼è¿äºæ°æ®ç»æ以æç§æ¹å¼æåæ°æ®ï¼è¿æ ·å°±å¯ä»¥å¨è¿äºæ°æ®ç»æä¸å®ç°é«æçæ¥æ¾ç®æ³ãè¿ç§æ°æ®ç»æå°±å«åç´¢å¼ãç±æ¤å¯ç¥ï¼ç´¢å¼æ¯è¦æ¶èæ°æ®åºç©ºé´çãè约ææ¯ä¸ç§é»è¾æ¦å¿µã
ââä¸è¬æ¥è¯´ç´¢å¼æ¬èº«ä¹å¾å¤§ï¼ä¸å¯è½å ¨é¨åå¨å¨å åä¸ï¼å æ¤å¾å¾ä»¥ç´¢å¼æ件çå½¢å¼åæ¾å¨ç£çä¸ãç®å大å¤æ°ç´¢å¼é½éç¨BTreeæ æ¹å¼æ建ã
ââä¾å¦ï¼ä¸æ¬åå ¸ï¼å¦ä½å¿«éæ¾å°æ个åï¼å¯ä»¥ç»åå ¸å ç®å½ï¼å¯¹æ°æ®åºæ¥è¯´,ç´¢å¼çä½ç¨å³æ¯ç»"æ°æ®"å ç®å½ã
ââ设æ N æ¡éæºè®°å½,ä¸ç¨ç´¢å¼,å¹³åæ¥æ¾ N/2 次,é£ä¹ç¨äºç´¢å¼ä¹åå¢ãå¦ææ¯ btree(äºåæ )ç´¢å¼ï¼log2Nï¼å¦ææ¯hash(åå¸)ç´¢å¼ï¼æ¶é´å¤æåº¦æ¯ 1ã
为ä½ç´¢å¼å¿«ï¼
ââææ¾æ¥è¯¢ç´¢å¼è¡¨æ¯ç´æ¥æ¥è¯¢æ°æ®è¡¨è¦å¿«çå¤ï¼é¦å ï¼ç´¢å¼è¡¨æ¯æåºäºï¼å¯ä»¥ç±»ä¼¼äºåæ¥æ¾ï¼é常ææçæé«äºæ¥è¯¢çé度ãå ¶è¿ç¨å æ¯å°äºå æåºå¥½çç´¢å¼è¡¨ä¸æ£ç´¢æ¥è¯¢ï¼æ¾å°å ¶ä¸»é®åï¼å°±ç´æ¥å®ä½å°è®°å½æå¨ä½ç½®ï¼ç¶åç´æ¥è¿åè¿æ¡æ°æ®ã
- æåºï¼treeç»æï¼ç±»ä¼¼äºåæ¥æ¾
- ç´¢å¼è¡¨å°
ä¼ç¹:
- ç´¢å¼æ¯æ°æ®åºä¼åã
- 表ç主é®ä¼é»è®¤èªå¨å建索å¼ã
- æ¯ä¸ªå段é½å¯ä»¥è¢«ç´¢å¼ã
- 大ééä½æ°æ®åºçIOç£ç读åææ¬ï¼æ大æé«äºæ£ç´¢é度ã
- ç´¢å¼äºå 对æ°æ®è¿è¡äºæåºï¼å¤§å¤§æé«äºæ¥è¯¢æçã
缺ç¹:
- ç´¢å¼æ¬èº«ä¹æ¯ä¸å¼ 表ï¼è¯¥è¡¨ä¿åäºä¸»é®ä¸ç´¢å¼å段ï¼å¹¶æåå®ä½è¡¨çè®°å½ï¼æ以索å¼åä¹è¦å ç¨ç©ºé´ã
- ç´¢å¼è¡¨ä¸çå 容ï¼å¨ä¸å¡è¡¨ä¸é½æï¼æ°æ®æ¯éå¤çï¼ç©ºé´æ¯â浪费çâã
- è½ç¶ç´¢å¼å¤§å¤§æé«äºæ¥è¯¢çé度ï¼ä½å¯¹æ°æ®çå¢ãå ãæ¹çæä½éè¦æ´æ°ç´¢å¼è¡¨ä¿¡æ¯ï¼å¦ææ°æ®éé常巨大ï¼æ´æ°æçå°±å¾æ ¢,å 为æ´æ°è¡¨æ¶,MySQLä¸ä» è¦ä¿åæ°æ®,ä¹è¦ä¿åä¸ä¸ç´¢å¼æ件ã
- éçä¸å¡çä¸æååï¼ä¹å建ç«çç´¢å¼å¯è½ä¸è½æ»¡è¶³æ¥è¯¢éæ±ï¼éè¦æ¶èæ们çæ¶é´å»æ´æ°ç´¢å¼ã
MySQL æä¾å¤ç§ç´¢å¼ç±»åä¾éæ©ï¼
- æ®éç´¢å¼ï¼ä¸ä¸ªç´¢å¼åªå æ¬ä¸ä¸ªåï¼ä¸ä¸ªè¡¨å¯ä»¥æå¤ä¸ªå
- å¤åç´¢å¼ï¼ä¸ä¸ªç´¢å¼åæ¶å æ¬å¤å
- å¯ä¸ç´¢å¼ï¼ç´¢å¼åçå¼å¿ é¡»å¯ä¸ï¼ä½å 许æ空å¼ï¼ä¸»é®ä¼èªå¨å建å¯ä¸ç´¢å¼
- 主é®ç´¢å¼ï¼åªæä¸ä¸ªä¸»é®ç´¢å¼
- å ¨æç´¢å¼ï¼MySQL5.X çæ¬åªæ MyISAM åå¨å¼ææ¯æ FULLTEXTï¼å¹¶ä¸åªéäºCHARãVARCHAR å TEXT ç±»åçåä¸å建ã
MySQL çç´¢å¼æ¹æ³ï¼
- HASH
- BTREE ï¼MySQL ä¸å¤æ°ç´¢å¼é½ä»¥ BTREEï¼
ç´¢å¼ç使ç¨ååï¼
- ä¸è¿åº¦ç´¢å¼
- ç´¢å¼æ¡ä»¶å(where åé¢æé¢ç¹çæ¡ä»¶æ¯è¾éå®ç´¢å¼)
- ç´¢å¼æ£åå¼,è¿äºéä¸çå¼ä¸è¦ç´¢å¼ï¼ä¾å¦:ç»æ§å«"ç·","女"å ç´¢å¼,æä¹ä¸å¤§
æ¥çç´¢å¼
å建索å¼
1ï¼å建索å¼
å建索å¼,æ左边çåæå ³é®ï¼ä¸»é®ä¼èªå¨å建索å¼
create index ç´¢å¼å on 表å称 (column_name,[column_name...]);
create index loc_index on dept(loc);
2ï¼ä¿®æ¹è¡¨ç»æ,æ·»å æ®éç´¢å¼
3ï¼å建å¯ä¸ç´¢å¼
4ï¼å建å¤åç´¢å¼
5ï¼å建å¤åå¯ä¸ç´¢å¼
alter table dept add unique fuhe_index(dname,loc)ï¼
å é¤ç´¢å¼
alter table 表å称 drop index ç´¢å¼å;
alter table dept drop index fuhe_indexï¼
ç´¢å¼æ«æç±»å
- ALL å ¨è¡¨æ«æï¼æ²¡æä¼åï¼ææ ¢çæ¹å¼ã
- index ç´¢å¼å ¨æ«æï¼å ¶æ¬¡æ ¢çæ¹å¼ã
- range ç´¢å¼èå´æ«æï¼å¸¸ç¨è¯<ï¼<=ï¼>=ï¼betweençæä½ã
- ref 使ç¨éå¯ä¸ç´¢å¼æ«ææå¯ä¸ç´¢å¼åç¼æ«æï¼è¿ååæ¡è®°å½ï¼å¸¸åºç°å¨å ³èæ¥è¯¢ä¸ã
- eq_ref 类似refï¼åºå«å¨äºä½¿ç¨çæ¯å¯ä¸ç´¢å¼ï¼ä½¿ç¨ä¸»é®çå ³èæ¥è¯¢ã
- const/system åæ¡è®°å½ï¼ç³»ç»ä¼æå¹é è¡ä¸çå ¶ä»åä½ä¸ºå¸¸æ°å¤çï¼å¦ä¸»é®æå¯ä¸ç´¢å¼æ¥è¯¢ï¼systemæ¯constçç¹æ®æ åµã
- null MySQLä¸è®¿é®ä»»ä½è¡¨æç´¢å¼ï¼ç´æ¥è¿åç»æã
æå·¦ç¹æ§
explain
select * from dept where loc='äºåº' #使ç¨äºlocç´¢å¼
explain
select * from dept where dname='ç åé¨'#使ç¨äºdnameç´¢å¼
explain
select * from dept where dname='ç åé¨' and loc='äºåº' #使ç¨äºdnameç´¢å¼
å½æ们å建ä¸ä¸ªèåç´¢å¼ï¼å¤åç´¢å¼ï¼çæ¶åï¼å¦(k1,k2,k3)ï¼ç¸å½äºå建äºï¼k1ï¼ã(k1,k2)å(k1,k2,k3)ä¸ä¸ªç´¢å¼ï¼è¿å°±æ¯æå·¦å¹é ååï¼ä¹ç§°ä¸ºæå·¦ç¹æ§ã