# ç®ä» ## æ°æ®ç±»å 主è¦å æ¬ä»¥ä¸äºå¤§ç±»ï¼ æ´æ°ç±»åï¼BITãBOOLãTINY INTãSMALL INTãMEDIUM INTã INTã BIG INT æµ®ç¹æ°ç±»åï¼FLOATãDOUBLEãDECIMAL å符串类åï¼CHARãVARCHARãTINY TEXTãTEXTãMEDIUM TEXTãLONGTEXTãTINY BLOBãBLOBãMEDIUM BLOBãLONG BLOB æ¥æç±»åï¼DateãDateTimeãTimeStampãTimeãYear å ¶ä»æ°æ®ç±»åï¼BINARYãVARBINARYãENUMãSETãGeometryãPointãMultiPointãLineStringãMultiLineStringãPolygonãGeometryCollectionç # æ´å | MySQLæ°æ®ç±»å | å«ä¹ï¼æç¬¦å·ï¼ | | ------------- | ------------------------------------ | | tinyint(m) | 1个åè èå´(-128~127) | | smallint(m) | 2个åè èå´(-32768~32767) | | mediumint(m) | 3个åè èå´(-8388608~8388607) | | int(m) | 4个åè èå´(-2147483648~2147483647) | | bigint(m) | 8个åè èå´(+-9.22*10ç18次æ¹) | int(m) m ç¨äºæå®æ¾ç¤ºå®½åº¦ï¼int(5)表示5使°çå®½åº¦ãæ³¨ææ¾ç¤ºå®½åº¦å±æ§ä¸è½æ§å¶åå¯ä»¥åå¨çå¼èå´ï¼æ¾ç¤ºå®½åº¦å±æ§é常ç±åºç¨ç¨åºç¨äºæ ¼å¼åæ´æ°å¼ã ### æµ®ç¹å | MySQLæ°æ®ç±»å | å«ä¹ | | ------------- | ------------------------------------- | | float(m,d) | å精度浮ç¹å 4åè mæ»ä¸ªæ°ï¼då°æ°ä½ | | double(m,d) | å精度浮ç¹å 8åè mæ»ä¸ªæ°ï¼då°æ°ä½ | æµ®ç¹åæ°æ®ç±»åä¼æç²¾åº¦ä¸¢å¤±çé®é¢ï¼æ¯å¦å°æ°ä½è®¾ç½®6ä½ï¼åå ¥0.45ï¼0.45è½¬æ¢æäºè¿å¶æ¯ä¸ªæ é循ç¯å°æ°0.01110011100...ï¼æ æ³å确表示ï¼åå¨çæ¶åä¼åç精度丢失ã ä¸è®ºæ¯å®ç¹è¿æ¯æµ®ç¹ç±»åï¼å¦æç¨æ·æå®çç²¾åº¦è¶ åºç²¾åº¦èå´ï¼åä¼åèäºå ¥è¿è¡å¤çã ### å®ç¹æ° æµ®ç¹å卿°æ®åºä¸åæ¾çæ¯è¿ä¼¼å¼ï¼èå®ç¹ç±»å卿°æ®åºä¸åæ¾çæ¯ç²¾ç¡®å¼ï¼ä¸ä¼ä¸¢å¤±ç²¾åº¦ãå®ç¹æ°ä»¥å符串形å¼åå¨ã decimal(m,d) åæ°mæ¯æ»ä¸ªæ°ï¼dæ¯å°æ°ä½ã ### å符串 | MySQLæ°æ®ç±»å | å«ä¹ | | ------------- | ------------------------------- | | char(n) | åºå®é¿åº¦ï¼æå¤255个åè | | varchar(n) | å¯åé¿åº¦ï¼æå¤65535个åè | | tinytext | å¯åé¿åº¦ï¼æå¤255个åè | | text | å¯åé¿åº¦ï¼æå¤65535个åè | | mediumtext | å¯åé¿åº¦ï¼æå¤2ç24次æ¹-1个åè | | longtext | å¯åé¿åº¦ï¼æå¤2ç32次æ¹-1个åè | æ¥è¯¢é度ï¼char > varchar > text charï¼å®é¿ï¼æçé«ï¼ä¸è¬ç¨äºåºå®é¿åº¦ç表åæäº¤æ°æ®åå¨ ï¼ä¾å¦ï¼èº«ä»½è¯å·ï¼ææºå·ï¼çµè¯ï¼å¯ç çãcharé¿åº¦ä¸è¶³æ¶ï¼å¨å³è¾¹ä½¿ç¨ç©ºæ ¼å¡«å ï¼èvarcharå¼ä¿åæ¶åªä¿åéè¦çå符æ°ã varcharï¼ä¸å®é¿ï¼æçåä½ï¼å 容å¼å¤´ç¨1å°2个åè表示å®é é¿åº¦ï¼é¿åº¦è¶ è¿255æ¶éè¦2个åèï¼ï¼å æ¤æå¤§é¿åº¦ä¸è½è¶ è¿65535ã nvarcharï¼åå¨çæ¯Unicodeæ°æ®ç±»åçå符ï¼ä¸ç®¡æ¯ä¸ä¸ªåç¬¦è¿æ¯ä¸ä¸ªæ±åï¼é½å为2个åè ï¼ä¸è¬ç¨ä½ä¸ææè å ¶ä»è¯è¨è¾å ¥ï¼è¿æ ·ä¸å®¹æä¹±ç ï¼varcharå卿±åæ¯2个åèï¼å ¶ä»å符å为1个åè ï¼varcharéåè¾å ¥è±æåæ°åã textï¼ä¸éè¦æå®åå¨é¿åº¦ï¼è½ç¨varcharå°±ä¸ç¨textã ### äºè¿å¶æ°æ®ï¼BLOBï¼ äºè¿å¶æ°æ®ç±»åå¯åå¨ä»»ä½æ°æ®ï¼å¦å¾åãå¤åªä½ãææ¡£çã BLOBåTEXTå卿¹å¼ä¸åï¼TEXTä»¥ææ¬æ¹å¼åå¨ï¼è±æåå¨åºå大å°åï¼èBlobæ¯ä»¥äºè¿å¶æ¹å¼åå¨ï¼ä¸åºå大å°åã ### æ¥ææ¶é´ç±»å | MySQLæ°æ®ç±»å | å«ä¹ | | ------------- | ----------------------------- | | date | æ¥æ '2008-12-2' | | time | æ¶é´ '12:25:36' | | datetime | æ¥ææ¶é´ '2008-12-2 22:06:44' | | timestamp | èªå¨åå¨è®°å½ä¿®æ¹æ¶é´ | è¥å®ä¹ä¸ä¸ªå段为timestampï¼è¿ä¸ªå段éçæ¶é´æ°æ®ä¼éå ¶ä»å段修æ¹çæ¶åèªå¨å·æ°ï¼æä»¥è¿ä¸ªæ°æ®ç±»åçåæ®µå¯ä»¥åæ¾è¿æ¡è®°å½æå被修æ¹çæ¶é´ã # åºæ¬å½ä»¤ ## å¯å¨ å¯å¨æå¡ï¼`service mysqld start` å ³éæå¡ï¼`service mysqld stop` å¯å¨å®¢æ·ç«¯ï¼`mysql -uroot -p` -u åä¸è¦æç©ºæ ¼ï¼Ubuntuæç©ºæ ¼ï¼ ## æ°æ®åºæä½ ```mysql SHOW DATABASES; CREATE DATABASE db_name; USE db_name; DROP DATABASE db_name; ``` ## 表 å建表ï¼`create table user (id int, name varchar(10))` æ¸ ç©ºè¡¨æ°æ®ï¼`truncate table user;` æ¥çè¡¨ç»æï¼`desc table_name/select columns from table_name` `SHOW CREATE db` | `SHOW CREATE table`ï¼æ¾ç¤ºå建ç¹å®æ°æ®åºæè¡¨çMySQLè¯å¥ ## æ£ç´¢ æ£ç´¢ä¸åçè¡ï¼ ```mysql SELECT DISTINCT vend_id FROM products; ``` éå¶ç»æï¼ ```mysql SELECT prod_name FROM products LIMIT 0, 5; #å¼å§ä½ç½®ï¼è¡æ°|è¿åä»ç¬¬0è¡å¼å§ç5è¡æ°æ® ``` ## æåº ```mysql SELECT prod_name FROM products ORDER BY prod_name, prod_price DESC; #å æåç§°æåºï¼åæä»·æ ¼æåº | DESCéåºæåï¼é»è®¤ASCååº ``` æ¾åºæè´µçç©åï¼ ```mysql SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; # ä» è¿åä¸è¡ ``` åå¥é¡ºåºï¼FORM -- ORDER BY -- LIMITï¼é¡ºåºä¸å¯¹ä¼æ¥éã ## è¿æ»¤ å奿ä½ç¬¦ï¼ | æä½ç¬¦ | 说æ | | ------- | -------- | | = | çäº | | <> | ä¸çäº | | != | ä¸çäº | | < | å°äº | | <= | å°äºçäº | | BETWEEN | 两å¼ä¹é´ | ### ä¸å¹é æ£æ¥ï¼ ```mysql SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003; ``` ### èå´æ¥è¯¢ï¼ ```mysql SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; ``` ### ç©ºå¼æ£æ¥ ```mysql SELECT prod_name FROM products WHERE prod_price IS NULL; ``` ### è®¡ç®æ¬¡åº ```mysql SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10; # ANDä¼å 级大äºOR ``` ### IN æä½ç¬¦ ```mysql SELECT prod_name, product_price FROM products WHERE vend_id IN (1002, 1003) ORDER BY prod_name; ``` INæä½ç¬¦ä¸è¬æ¯ORæä½ç¬¦æ¸ åæ§è¡æ´å¿«ãINçæå¤§ä¼ç¹æ¯å¯ä»¥å å«å ¶ä»SELECTè¯å¥ï¼ä½¿å¾è½å¤æ´å¨æå°å»ºç«WHEREåå¥ã ### NOTæä½ç¬¦ MySQLæ¯æä½¿ç¨NOT 对IN ãBETWEEN åEXISTSåå¥ååã ```mysql SELECT prod_name, product_price FROM products WHERE vend_id NOT IN (1002, 1003) ``` ### LIKEæä½ç¬¦ % å¹é 0å°å¤ä¸ªä»»æå符ã ```mysql SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '%jet%'; ``` _ å¹é å个å符ã ```mysql SELECT prod_id, prod_name FROM products WHERE prod_name LIKE '_jet_'; ``` éé 符æç´¢æ¯å ¶ä»ç®åæç´¢èæ¶ï¼ä¸è½è¿åº¦ä½¿ç¨éé 符ã ### LIMIT limit 0,4 ï¼ä»ç¬¬0æ¡è®°å½å¼å§ï¼å4æ¡ ### æ£åè¡¨è¾¾å¼ OR å¹é ï¼ ```mysql SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name; ``` å¹é ç¹å®åç¬¦ï¼ ```mysql SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Rely' #å¹é 1æ2æ3 [^123]åå ORDER BY prod_name; ``` å¹é èå´ï¼ ```mysql SELECT prod_name FROM products WHERE prod_anem REGEXP '[1-5] Ton';#å¹é 1-5ä»»æä¸ä¸ªæ°åï¼[a-z]åç ``` å¹é ç¹æ®åç¬¦ï¼ ```mysql SELECT prod_name FROM products WHERE prod_anem REGEXP '\\.';#è½¬ä¹ ``` å¹é å¤ä¸ªå®ä¾: ```mysql SELECT prod_name FROM products WHERE prod_anem REGEXP '\\([0-9] sticks?\\)'; #?å¹é å®åé¢çä»»ä½å符åºç°0次æ1次 ``` å¹é è¿ççå个æ°ï¼ ```mysql SELECT prod_name FROM products WHERE prod_anem REGEXP '[[:digit:]]{4}'; #[:digit:]å¹é ä»»ææ°å ``` å®ä½ç¬¦ï¼ | å å符 | 说æ | | ------- | -------- | | ^ | ææ¬å¼å§ | | $ | ææ¬ç»æ | | [[:<:]] | è¯å¼å§ | | [[:>:]] | è¯ç»æ | æ¥æ¾ä¸ä¸ªæ°ï¼å æ¬å°æ°ç¹å¼å§çæ°ï¼å¼å§çææäº§åï¼ ```mysql SELECT prod_name FROM products WHERE prod_name REGEXP '^[0-9\\.]' ORDER BY prod_name; ``` ç®åçæ£åè¡¨è¾¾å¼æµè¯ï¼ ```mysql SELECT 'hello' REGEXP '[0-9]';#REGEXPæ£æ¥è¿å0æ1ï¼æ¤å¤è¿å0 ``` # 计ç®å段 ## æ¼æ¥å段 MySQL使ç¨Concat()彿°å®ç°æ¼æ¥ã ```mysql SELECT Concat(RTrim(vend_name), ' (', vend_country, ')') #RTrim()廿å³è¾¹ç©ºæ ¼ | Trim()å»æä¸¤è¾¹ç©ºæ ¼ FROM vend_name ORDER BY vend_name; ``` è¿åå¼ï¼`ACME (USA)` 使ç¨å«åï¼`SELECT dept AS department FROM t_dept;` ## 计ç®å段 ```mysql SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 2005; ``` # 彿° ## ææ¬å¤ç ```mysql SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; ``` Soundex()彿°ï¼å¹é ææåé³å符串ã ```mysql SELECT cust_name, cust_contact FROM customers WHERE Soundex(cust_contact) = Soundex('Y Lie'); ``` è¿åæ°æ®ï¼`Tyson Y lee` ## æ¥æå¤ç彿°  æ¥æ¾2005å¹´9æçææè®¢åï¼ ```mysql SELECT cust_id, order_num FROM orders WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30'; ``` æè ```mysql SELECT cust_id, order_num FROM orders WHERE Year(order_date) = 2005 AND Month(order_date) = 9; ``` ## æ°å¼å¤ç彿°  # æ±æ»æ°æ® ## èé彿° Sum:æ±å Avg:æ±å¹³åæ° Max:æ±æå¤§å¼ Min:æ±æå°å¼ Count:æ±è®°å½ ```mysql SELECT SUM(item_price*quanlity) AS total_price FROM orderitems WHERE order_num = 2005; ``` èéä¸åå¼ï¼ ```mysql SELECT AVG(DISTINCT prod_price) AS avg_price #åªèèä¸åä»·æ ¼ FROM products WHERE vend_id = 1003; ``` # åç» åç¬å°ä½¿ç¨group by没æä¹ï¼å®åªè½æ¾ç¤ºåºæ¯ç»è®°å½çç¬¬ä¸æ¡è®°å½ã ```mysql SELECT * FROM orders GROUP BY cust_id; ```  é¤èé计ç®è¯å¥å¤ï¼SELECTè¯å¥ä¸çæ¯ä¸ªåé½å¿ é¡»å¨GROUP BYåå¥ä¸ç»åºã ```mysql SELECT vend_id, COUNT(*) AS num_prods #vend_idå¨GROUP BYåå¥ç»åº FROM products GROUP BY vend_id; ``` GROUP BYåå¥å¿ é¡»åºç°å¨WHEREåå¥ä¹åï¼ORDER BYåå¥ä¹åã ## è¿æ»¤åç» having ç¨æ¥åç»æ¥è¯¢åæå®ä¸äºæ¡ä»¶æ¥è¾åºæ¥è¯¢ç»æï¼havingä½ç¨åwhere类似ï¼ä½æ¯havingåªè½ç¨å¨group byåºåï¼å¹¶ä¸å¿ é¡»ä½äºgroup byä¹åorder byä¹åã ```mysql SELECT cust_id, COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2; ``` ## havingåwhereåºå« ```mysql SELECT cust_id FROM orders GROUP BY cust_id HAVING COUNT(cust_id) >= 2; SELECT cust_id FROM orders GROUP BY cust_id WHERE COUNT(cust_id) >= 2; #Error Code : 1064 ``` 第ä¸ä¸ªsqlè¯å¥å¯ä»¥æ§è¡ï¼ä½æ¯ç¬¬äºä¸ªä¼æ¥éã - WHEREåå¥ä¸èµ·ä½ç¨ï¼å ä¸ºè¿æ»¤æ¯åºäºåç»èéå¼è䏿¯ç¹å®è¡å¼çã - äºè ä½ç¨ç对象ä¸åï¼whereåå¥ä½ç¨äºè¡¨åè§å¾ï¼havingä½ç¨äºç»ã - WHERE卿°æ®åç»åè¿è¡è¿æ»¤ï¼HAVING卿°æ®åç»åè¿è¡è¿æ»¤ã ```mysql SELECT vend_id, COUNT(*) AS num_prods FROM products WHERE prod_price >= 10 GROUP BY vend_id HAVING COUNT(*) >= 2; ``` WHEREåå¥è¿æ»¤ææprod_priceè³å°ä¸º10çè¡ãç¶åævend_idåç»æ°æ®ï¼HAVINGåå¥è¿æ»¤è®¡æ°ä¸º2æ2以ä¸çåç»ã ## SELECT åå¥é¡ºåº ```mysql SELECT FROM WHERE GROUP BY HAVING ORDER BY LIMIT ``` # åæ¥è¯¢ ç±äºæ§è½çéå¶ï¼ä¸è½åµå¥å¤ªå¤çåæ¥è¯¢ã ```mysql SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2'); ``` # è¿æ¥ ## å è¿æ¥ æ¾åºä¾åºåç产ç产åã ```mysql SELECT vend_name, prod_name FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id; #è¿æ¥æ¡ä»¶ä½¿ç¨onåå¥ ``` çä»·äºï¼ ```mysql SELECT vend_name, prod_name FROM vendors, products WHERE vendors.vend_id = products.vend_id; ``` 没æç»åºè¿æ¥æ¡ä»¶çè¯ï¼ä¼å¾å°ä¸¤å¼ 表çç¬å¡å°ç§¯ã ## èªè¿æ¥ æ¾åºç产nikeçä¾åºåçäº§çææç©åã ```mysql SELECT prod_id, prod_name FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'nike'; ``` ## èªç¶è¿æ¥ natural joinæ¯å¯¹ä¸¤å¼ 表ä¸å段ååæ°æ®ç±»åé½ç¸åçåæ®µè¿è¡**çå¼è¿æ¥**ï¼å¹¶è¿åç¬¦åæ¡ä»¶çç»æ ã ```mysql SELECT * FROM role NATURAL JOIN user_role; ``` è¿åç»æï¼  ## å è¿æ¥ æ¾ç¤ºç¬¦åè¿æ¥æ¡ä»¶çè®°å½ã没æè®¾ç½®è¿æ¥æ¡ä»¶åè¿åç¬å¡å°ç§¯çç»æãjoin é»è®¤æ¯ inner joinã ```mysql SELECT * FROM role INNNER JOIN user_role ``` è¿åç»æï¼  joinâ¦using(column)ææå®ç屿§åçå¼è¿æ¥ã joinâ¦on tableA.column1 = tableB.column2 æå®æ¡ä»¶ã ```mysql SELECT * FROM role INNER JOIN user_role ON role.role_id = user_role.role_id ``` è¿åç»æï¼  ## å¤è¿æ¥ å·¦å¤èæ¥ï¼Left Outer Joinï¼ï¼é¤äºå¹é 2å¼ è¡¨ä¸ç¸å ³èçè®°å½å¤ï¼è¿ä¼å¹é 左表ä¸å©ä½çè®°å½ï¼å³è¡¨ä¸æªå¹é å°çåæ®µç¨NULL表示ã å³å¤èæ¥ï¼Right Outer Joinï¼ï¼é¤äºå¹é 2å¼ è¡¨ä¸ç¸å ³èçè®°å½å¤ï¼è¿ä¼å¹é å³è¡¨ä¸å©ä½çè®°å½ï¼å·¦è¡¨ä¸æªå¹é å°çåæ®µç¨NULL表示ã å¨å¤å®å·¦è¡¨åå³è¡¨æ¶ï¼è¦æ ¹æ®è¡¨ååºç°å¨Outer Joinçå·¦å³ä½ç½®å ³ç³»ã æ¥æ¾ææå®¢æ·åå ¶è®¢åï¼å æ¬æ²¡æä¸è¿è®¢åç客æ·ã使ç¨å·¦å¤è¿æ¥ï¼ä¿çå·¦è¾¹è¡¨çææè®°å½ã ```mysql SELECT customer.cust_id, order.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = order.cust_id; ``` ## å¤è¡¨è¿æ¥ ```mysql SELECT goal.player, eteam.teamname, game.stadium, game.mdate FROM game JOIN goal ON game.id = goal.matchid JOIN eteam ON eteam.id = goal.teamid WHERE eteam.id = 'GRE' ``` # ç»åæ¥è¯¢ ## UNION UNIONä¸çæ¯ä¸ªæ¥è¯¢å¿ é¡»å å«ç¸åçåãè¡¨è¾¾å¼æèé彿°ãåæ°æ®ç±»åå¿ é¡»å ¼å®¹ã ```mysql SELECT vend_id, prod_id FROM products WHERE prod_price <= 5 UNION SELECT vend_id, prod_id FROM products WHERE vend_id IN (1001, 1002); -- çä»·äº SELECT vend_id, prod_id FROM products WHERE prod_price < = 5 AND vend_id IN (1001, 1002); ``` UNION é»è®¤ä¼å»æéå¤çè¡ï¼ä½¿ç¨ UNION ALLå¯ä»¥è¿åææå¹é è¡ã # å ¨ææç´¢ 为äºè¿è¡å ¨ææ¬æç´¢ï¼å¿ 须索å¼è¢«æç´¢çåï¼èä¸è¦éçæ°æ®çæ¹å䏿å°éæ°ç´¢å¼ãå¨å¯¹è¡¨åè¿è¡éå½è®¾è®¡åï¼MySQLä¼èªå¨è¿è¡ææçç´¢å¼åéæ°ç´¢å¼ã å¯å¨å ¨ææç´¢ï¼ä» å¨MyISAMæ°æ®åºå¼æä¸æ¯æå ¨ææ¬æç´¢ï¼ï¼ ```mysql CREATE TABLE productnotes ( note_id int NOT NULL AUTO_INCREMENT, note_text text NULL, PRIMARY KEY(note_id), FULLTEXT(note_text) ) ENGINE=MyISAM; ``` å¨å®ä¹ä¹åï¼MySQLèªå¨ç»´æ¤è¯¥ç´¢å¼ãå¨å¢å ãæ´æ°æå é¤è¡æ¶ï¼ç´¢å¼éä¹èªå¨æ´æ°ã ä¸è¦å¨å¯¼å ¥æ°æ®æ¶ä½¿ç¨FULLTEXTï¼ãåºè¯¥é¦å å¯¼å ¥æææ°æ®ï¼ç¶ååä¿®æ¹è¡¨ï¼å®ä¹FULLTEXTï¼è¿æ ·å¯ä»¥æ´å¿«å¯¼å ¥æ°æ®ã 使ç¨å ¨ææç´¢ï¼ ```mysql SELECT note_text FROM productnotes WHERE Match(note_text) Against('shoe'); #Matchæå®æç´¢åï¼Againstæå®æç´¢è¯ ``` è¿åç»æï¼`nike shoes is good`ï¼æç´¢ä¸åºå大å°åã å ¨ææç´¢ä¼å¯¹è¿åç»æè¿è¡æåºï¼å ·æé«ç级çè¡å è¿åï¼ ```mysql SELECT note_text, Match(note_text) Against('shoes') AS rank #ç级ç±MySQLæ ¹æ®è¡ä¸è¯çæ°ç®ãå¯ä¸è¯çæ°ç®ãæ´ä¸ªç´¢å¼ä¸è¯çæ»æ°ä»¥åå å«è¯¥è¯çè¡çæ°ç®è®¡ç®åºæ¥ã FROM productnotes; ``` å ¨ææç´¢æ°æ®æ¯æç´¢å¼çï¼é度快ã # 表æä½ ## å建表 ```mysql CREATE TABLE productnotes ( note_id int NOT NULL AUTO_INCREMENT, note_text text NULL, quanlity int NOT NULL DEFAULT 1, # é»è®¤å¼ï¼åªæ¯æå¸¸é PRIMARY KEY(note_id), FULLTEXT(note_text) ) ENGINE=MyISAM; ``` 主é®ä¸åªè½ä½¿ç¨NOT NULLå¼çåã ## æ´æ°è¡¨ æ°æ®åºè¡¨çæ´æ¹ä¸è½æ¤éï¼åºå å好å¤ä»½ã æ·»å åï¼ ```mysql ALTER TABLE vendors ADD vend_phone CHAR(20); ``` å é¤åï¼ ```mysql ALTER TABLE vendors DROP COLUMN vend_phone; ``` æ´æ¹å屿§ï¼ ```mysql ALTER TABLE vendors MODIFY vend_phone CHAR(16); ``` 夿çè¡¨ç»ææ´æ¹ä¸è¬éè¦æå¨å é¤è¿ç¨ï¼ - ç¨æ°çåå¸å±å建ä¸ä¸ªæ°è¡¨ï¼ - 使ç¨INSERT SELECTè¯å¥ï¼ä»æ§è¡¨å¤å¶æ°æ®å°æ°è¡¨ï¼ - æ£éªå 嫿鿰æ®çæ°è¡¨ï¼ - éå½åæ§è¡¨ï¼å¦æç¡®å®ï¼å¯ä»¥å é¤å®ï¼ï¼ - ç¨æ§è¡¨åæ¥çååéå½åæ°è¡¨ï¼ - éæ°å建触åå¨ãåå¨è¿ç¨ãç´¢å¼åå¤é®ã ## çº¦æ æ·»å 主é®çº¦æï¼ ```mysql ALTER TABLE vendors ADD CONSTRAINT pk_vendors PRIMARY KEY(vend_id); ``` å é¤ä¸»é®çº¦æï¼ ```mysql ALTER TABLE vendors DROP PRIMARY KEY; ``` æ·»å å¤é®çº¦æï¼ ```mysql ALTER TABLE products ADD FOREIGN KEY(vendor_id) REFERENCES vendors(vendor_id); ``` å é¤å¤é®çº¦æï¼ ```mysql ALTER TABLE products DROP FOREIGN KEY vendor_id; ``` ## å é¤è¡¨ `DROP TABLE cumstomers` ## truncateãdeleteä¸dropåºå« **ç¸åç¹ï¼** 1. truncateåä¸å¸¦whereåå¥çdeleteã以ådropé½ä¼å é¤è¡¨å çæ°æ®ã 2. dropãtruncate齿¯DDLè¯å¥(æ°æ®å®ä¹è¯è¨)ï¼æ§è¡åä¼èªå¨æäº¤ã **ä¸åç¹ï¼** 1. truncate å delete åªå 餿°æ®ä¸å é¤è¡¨çç»æï¼drop è¯å¥å°å é¤è¡¨çç»æè¢«ä¾èµç约æã触åå¨ãç´¢å¼ï¼ 2. é度ï¼ä¸è¬æ¥è¯´: drop> truncate > deleteã ## éå½å表 `RENAME TABLE cusmtomers TO cust` # åæä½ ## æå ¥æ°æ® MySQLç¨åæ¡INSERTè¯å¥å¤çå¤ä¸ªæå ¥æ¯ä½¿ç¨å¤æ¡INSERTè¯å¥å¿«ã ```mysql INSERT INTO customers(cust_name, cust_city) VALUES('Tyson', 'GD'), ('sophia','GZ'); ``` INSERTæä½å¯è½å¾èæ¶ï¼ç¹å«æ¯æå¾å¤ç´¢å¼éè¦æ´æ°æ¶ï¼ï¼èä¸å®å¯è½éä½çå¾ å¤ççSELECTè¯å¥çæ§è½ãéä½INSERTè¯å¥çä¼å 级ï¼`INSERT LOW_PRIORITY INTO` ## æ´æ°æ°æ® 妿ç¨UPDATEè¯å¥æ´æ°å¤è¡ï¼å¹¶ä¸å¨æ´æ°è¿äºè¡ä¸çä¸è¡æå¤è¡æ¶åºä¸ä¸ªç°é误ï¼åæ´ä¸ªUPDATEæä½è¢«åæ¶ã为äºå¨åçé误æ¶ä¹ç»§ç»è¿è¡æ´æ°ï¼å¯ä½¿ç¨IGNOREå ³é®åï¼`UPDATE IGNORE customers...` ```mysql UPDATE customers SET cust_city = NULL WHERE cust_id = 1005; ``` è¿å弿¯åå½±åçè®°å½æ°ã ## å 餿°æ® 妿æ³ä»è¡¨ä¸å 餿æè¡ï¼ä¸è¦ä½¿ç¨DELETEãå¯ä½¿ç¨TRUNCATE TABLEè¯å¥ï¼å®å®æç¸åçå·¥ä½ï¼ä½é度æ´å¿«ï¼TRUNCATEå®é æ¯å é¤åæ¥çè¡¨å¹¶éæ°å建ä¸ä¸ªè¡¨ï¼è䏿¯éè¡å é¤è¡¨ä¸çæ°æ®ï¼ã ```mysql DELETE FROM customers WHERE cust_id = 1006; ``` 妿æ§è¡DELETEè¯å¥èä¸å¸¦WHEREåå¥ï¼è¡¨çæææ°æ®é½å°è¢«å é¤ãMySQLæ²¡ææ¤éæä½ï¼åºè¯¥é常å°å¿å°ä½¿ç¨UPDATEåDELETEã delete使ç¨å«åçæ¶åï¼è¦å¨deleteåfromé´å ä¸å é¤è¡¨çå«åã ```mysql DELETE a #å ä¸å é¤è¡¨çå«å FROM table1 a WHERE a.status = 0 AND EXISTS (SELECT b.id FROM table2 b WHERE b.id = a.id); ``` # 弿 InnoDBæ¯ä¸ä¸ªå¯é çäºå¡å¤ç弿ï¼å®ä¸æ¯æå ¨ææ¬æç´¢ï¼ MEMORYå¨åè½çåäºMyISAMï¼ä½ç±äºæ°æ®åå¨å¨å åï¼ä¸æ¯ç£çï¼ä¸ï¼é度å¾å¿«ï¼ç¹å«éåäºä¸´æ¶è¡¨ï¼ï¼ MyISAMæ¯ä¸ä¸ªæ§è½æé«ç弿ï¼å®æ¯æå ¨ææ¬æç´¢ï¼ä½ä¸æ¯æäºå¡å¤çã å¤é®ä¸è½è·¨å¼æï¼ç¨ä¸ä¸ªå¼æç表ä¸è½å¼ç¨ä½¿ç¨ä¸å弿ç表çå¤é®ã # è§å¾ è§å¾ä¸ºèæç表ãè§å¾æä¾äºä¸ç§MySQLçSELECTè¯å¥å±æ¬¡çå°è£ ï¼å¯ç¨æ¥ç®åæ°æ®å¤ç以åéæ°æ ¼å¼ååºç¡æ°æ®æä¿æ¤åºç¡æ°æ®ã ## åºç¨ - éç¨SQLè¯å¥ã - ä¿æ¤æ°æ®ãå¯ä»¥ç»ç¨æ·æäºè¡¨çç¹å®é¨åçè®¿é®æéè䏿¯æ´ä¸ªè¡¨çè®¿é®æéã - æ´æ¹æ°æ®æ ¼å¼å表示ãè§å¾å¯è¿åä¸åºå±è¡¨çè¡¨ç¤ºåæ ¼å¼ä¸åçæ°æ®ã ## éå¶ - ä¸è¡¨ä¸æ ·ï¼è§å¾å¿ é¡»å¯ä¸å½å - è§å¾ä¸è½ç´¢å¼ï¼ä¹ä¸è½æå ³èç触å卿é»è®¤å¼ã - è§å¾å¯ä»¥å表ä¸èµ·ä½¿ç¨ãä¾å¦ï¼ç¼å䏿¡èç»è¡¨åè§å¾çSELECTè¯å¥ã - ORDER BYå¯ä»¥ç¨å¨è§å¾ä¸ï¼ä½å¦æä»è¯¥è§å¾æ£ç´¢æ°æ®SELECTä¸ä¹å«æORDER BYï¼é£ä¹è¯¥è§å¾ä¸çORDER BYå°è¢«è¦çã ## è¯æ³ `CREATE VIEW`ï¼å建è§å¾ `SHOW CREATE VIEW viewname`ï¼æ¥çå建è§å¾çè¯å¥ `DROP VIEW viewname`ï¼å é¤è§å¾ `CREATE ORREPLACE VIEW`ï¼æ´æ°è§å¾ï¼ç¸å½äºå ç¨`DROP`åç¨`CREATE` ## ç®åå¤æè¿æ¥ å建ä¸ä¸ªè§å¾ï¼è¿å订è´äºä»»æäº§åç客æ·å表ã ```mysql CREATE VIEW productcustomers AS SELECT cust_name, orders, orderitems FROM customers, orders, orderitems WHERE orderitems.order_num = orders.order_num AND customers.cust_id = orders.cust_id; ``` 使ç¨è§å¾ï¼ ```mysql SELECT cust_name, cust_contact FROM productcustomers WHERE prod_id = 'nike'; ``` ## æ´æ°è§å¾ 对è§å¾å¢å æå é¤è¡ï¼å®é 䏿¯å¯¹å ¶åºè¡¨å¢å æå é¤è¡ãè§å¾ä¸»è¦ç¨äºæ°æ®æ£ç´¢ã # åå¨è¿ç¨ 为以åç使ç¨èä¿åç䏿¡æå¤æ¡MySQLè¯å¥çéåãå¯å°å ¶è§ä¸ºæ¹æä»¶ã 为ä»ä¹ä½¿ç¨åå¨è¿ç¨ï¼ - æå¤æå¤çè¿è¡å°è£ ï¼ç®å夿çæä½ï¼ - æé«æ§è½ï¼åå¨è¿ç¨æ¯åç¬SQLè¯å¥æ´å¿«ï¼ ## å建 è¿å产åå¹³åä»·æ ¼çåå¨è¿ç¨ï¼ ```mysql CREATE PROCEDURE productpricing() # å¯ä»¥æ¥ååæ° BEGIN SELECT Avg(prod_price) AS priceaverage FROM products; END; ``` BEGIN/END ç¨æ¥éå®åå¨è¿ç¨ä½ãæ¤æ®µä»£ç ä» å建äºåå¨è¿ç¨ï¼æªæ§è¡ã ## è°ç¨ `CALL productpricing()` ## å é¤ åå¨è¿ç¨å¨å建ä¹åï¼è¢«ä¿å卿å¡å¨ä¸ä»¥ä¾ä½¿ç¨ï¼ç´è³è¢«å é¤ã `DROP PROCEDURE productpricing IF EXISTS` ## åæ° MySQLæ¯æINï¼ä¼ éç»åå¨è¿ç¨ï¼ãOUTï¼ä»åå¨è¿ç¨ä¼ åºï¼åINOUTï¼å¯¹åå¨è¿ç¨ä¼ å ¥åä¼ åºï¼ç±»åçåæ°ã æ¥å订åå·å¹¶è¿å该订åçéé¢ï¼ ```mysql CREATE PROCEDURE ordertotal( IN ordernum INT, OUT ordersum DECIMAL(8, 2) ) BEGIN SELECT Sum(item_price * quantity) FROM orderitems WHERE order_num = ordernum INTO ordersum; END; ``` è°ç¨åå¨è¿ç¨ï¼`CALL ordertotal(20, @total);` æ¾ç¤ºè®¢åéé¢ï¼`SELECT @total;` ## å®ä¾ è·å订åç¨åéé¢ï¼è®¢åéé¢+ç¨æ¶ï¼ã ```mysql CREATE PROCEDURE ordertotal( IN onum INT, IN taxable BOOLEAN, # æ¯å¦è®¡ç¨ OUT ototal DECIMAL(8, 2) ) COMMENT 'order total, adding tax' BEGIN DECLARE total DECIMAL(8, 2); DECLARE taxrate INT DEFAULT 6; SELECT Sum(item_price * quanlity) FROM orderitems WHERE order_num = onum INTO total; IF taxable THEN SELECT total + (total / 100 * taxrate) INTO total; END IF; -- SELECT total INTO ototal; END; ``` è°ç¨åå¨è¿ç¨ï¼ ```mysql CALL ordertotal(20005, 1, @total); SELECT @total; ``` ## æ¥ç å建åå¨è¿ç¨ç CREATE è¯å¥ã ```mysql SHOW CREATE PROCEDURE ordertotal; ``` è·å¾å æ¬ä½æ¶ãç±è°å建ç详ç»ä¿¡æ¯çåå¨è¿ç¨å表ï¼ä½¿ç¨`SHOW PROCEDURE STATUS LIKE 'ordertotal';` æ¥çåå¨è¿ç¨ç¶æï¼ ```mysql SHOW PROCEDURE status; ``` # 游æ åå¨äºæ¸¸æ ä¹åï¼åºç¨ç¨åºå¯ä»¥æ ¹æ®éè¦æ»å¨ææµè§å ¶ä¸çæ°æ®ãMySQL游æ åªè½ç¨äºåå¨è¿ç¨ï¼å彿°ï¼ã ## å建游æ DECLARE å½å游æ ãåå¨è¿ç¨å¤ç宿åï¼æ¸¸æ 便æ¶å¤±ï¼æ¸¸æ åªåå¨äºåå¨è¿ç¨ï¼ãå®ä¹æ¸¸æ ä¹åï¼ä¾¿å¯ä»¥æå¼å®ã ```mysql CREATE PROCEDURE processorders() BEGIN DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; END; ``` ## ä½¿ç¨æ¸¸æ `OPEN ordernumbers` æå¼æ¸¸æ ã `CLOSE ordernumbers` CLOSEéæ¾æ¸¸æ 使ç¨çææå é¨å ååèµæºã ```mysql CREATE PROCEDURE processorders() BEGIN DECLARE done BOOLEAN DEFAULT 0; DECLARE o INT; DECLARE t DECIMAL(8, 2); DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; #游æ ç§»å°æå CREATE TABLE IF NOT EXISTS ordertotals (order_num INT, total DECIMAL(8,2)); -- æå¼æ¸¸æ OPEN ordernumbers; -- å¾ªç¯ REPEAT FETCH ordernumbers INTO o; CALL ordertotal(o, 1, t); -- æå ¥è®¢åå·å订åéé¢ INSERT INTO ordertotals(order_num, total) VALUES(o, t); -- done为1ç»æå¾ªç¯ UNTIL done END REPEAT; CLOSE ordernumbers; END; ``` åå¨è¿ç¨è¿å¨è¿è¡ä¸å建äºä¸ä¸ªæ°è¡¨ï¼ãè¿ä¸ªè¡¨å°ä¿ååå¨è¿ç¨çæçç»æãFETCHåæ¯ä¸ªorder_numï¼ç¶åç¨CALLæ§è¡å¦ä¸ä¸ªåå¨è¿ç¨ï¼è®¡ç®æ¯ä¸ªè®¢åç¨åéé¢ãæåï¼ç¨INSERTä¿åæ¯ä¸ªè®¢åç订åå·åéé¢ã # 触åå¨ è§¦å卿ä¾SQLè¯å¥èªå¨æ§è¡çåè½ãDELETE/INSERT/UPDATEæ¯æè§¦åå¨ï¼å ¶ä»SQLè¯å¥ä¸æ¯æã ## å建 å建触åå¨åè¦ç´ ï¼1.å¯ä¸ç触åå¨åï¼MySQL5è§å®è§¦åå¨åå¨è¡¨ä¸å¯ä¸ï¼æ°æ®åºæ²¡è¦æ±ï¼ï¼2.触åå¨å ³èç表ï¼3.ç¸åºçSQLè¯å¥ï¼4.使¶æ§è¡ï¼å¤çä¹åæè ä¹åï¼ã ```mysql CREATE TRIGGER newproduct AFTER INSERT ON products #æå ¥ä¹åæ§è¡ FOR EACH ROW SELECT 'product added'; #对æ¯ä¸ªæå ¥è¡æ§è¡ ``` åªæè¡¨æ¯æè§¦åå¨ï¼è§å¾ä¸æ¯æãåä¸è§¦åå¨ä¸è½ä¸å¤ä¸ªäºä»¶æå¤ä¸ªè¡¨å ³èï¼å¦æéè¦å¯¹INSERTåUPDATEæä½æ§è¡è§¦åå¨ï¼ååºè¯¥å®ä¹ä¸¤ä¸ªè§¦åå¨ã ## å é¤ `DROP TRIGGER newproduct` ## 使ç¨è§¦åå¨ INSERT 触åå¨å¯é¥®ç¨å为 NEW çèæè¡¨ï¼è®¿é®è¢«æå ¥çè¡ãNEWä¸çå¼ä¹å¯ä»¥è¢«æ´æ°ï¼å è®¸æ´æ¹è¢«æå ¥çå¼ï¼ã ```mysql CREATE TRIGGER neworder AFTER INSERT ON order FOR EACH ROW SELECT NEW.order_num; #è¿åæ°ç订åå· ``` DELETE 触åå¨å¯ä»¥å¼ç¨å为 OLD çèæè¡¨ï¼è®¿é®è¢«å é¤çè¡ãOLDä¸çå¼å ¨é½æ¯åªè¯»çï¼ä¸è½æ´æ°ã ```mysql CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW BEGIN INSERT INTO archive_orders(order_num, cust_id) VALUES(OLD.order_num, OLD.cust_id); END; ``` 订åå é¤ä¹åä¿å订åä¿¡æ¯å°å档表ã UPDATE 触åå¨å¯ä»¥å¼ç¨å为 OLD çèæè¡¨è®¿é®ä»¥åçå¼ï¼å¼ç¨ä¸ä¸ªå为NEWçèæè¡¨è®¿é®æ°æ´æ°çå¼ãNEW å¼å¯è¢«æ´æ°ï¼OLD 弿¯åªè¯»çã ä¸é¢çä¾åä¿è¯å·åç¼©åæ»æ¯å¤§åã ```mysql CREATE TRIGGER updatevendor BEFORE UPDATE ON vendor FOR EACH ROW SET NEW.vend_state = Upper(NEW.vend_state); ``` # äºå¡å¤ç äºå¡å¤çå¯ä»¥ç¨æ¥ç»´æ¤æ°æ®åºç宿´æ§ãå®ä¿è¯ææ¹çMySQLæä½è¦ä¹å®å ¨æ§è¡ï¼è¦ä¹å®å ¨ä¸æ§è¡ã CREATE/DROP æä½ä¸è½åéï¼å³ä¾¿å¯ä»¥æ§è¡åéæä½ï¼åéä¸ä¼æææã æ§è¡äºå¡è¿ç¨ï¼ä¸æ¦æä¸ªSQL失败ï¼åä¹åæ§è¡æåçSQLä¼è¢«èªå¨æ¤éã ## è¯æ³ ```mysql START TRANSACTION; DELETE FROM orderitems WHERE order_num = 20010; DELETE FROM orders WHERE order_num = 20010; COMMIT; ``` å½COMMITæROLLBACKè¯å¥æ§è¡åï¼äºå¡ä¼èªå¨å ³éã ## ä¿çç¹ ä¸ºäºæ¯æåéé¨åäºå¡å¤çï¼å¿ é¡»è½å¨äºå¡å¤çåä¸åéçä½ç½®æ¾ç½®å ä½ç¬¦ãè¿æ ·ï¼å¦æéè¦åéï¼å¯ä»¥åéå°æä¸ªå ä½ç¬¦ã ä¿çç¹å¨äºå¡å¤ç宿åèªå¨éæ¾ã ```mysql ... SAVEPOINT delete1; ... ROLLBACK TO delete1; ``` # æé MySQLç¨æ·è´¦å·åä¿¡æ¯åå¨å¨å为mysqlçMySQLæ°æ®åºä¸ã è·åç¨æ·è´¦å·åè¡¨ï¼ ```mysql USE mysql; SELECT user FROM user; ``` åå»ºç¨æ·è´¦å·ï¼`CREATE USER tyson IDENTIFIED BY 'abc123'` ä¿®æ¹å¯ç ï¼`SET PASSWORD FOR tyson = Password('xxx');`ï¼æ°å¯ç éä¼ éå°Password()彿°è¿è¡å å¯ã 设置å½åç¨æ·å¯ç ï¼`SET PASSWORD = Password('xxx');` éå½åè´¦å·ï¼`RENAME USER tyson TO tom` å é¤ç¨æ·è´¦å·ï¼`DROP USER tyson` æ¥çè®¿é®æéï¼`SHOW GRANTS FOR tyson`ï¼è¿å`USAGE ON *.*`å表示没ææéã æäºè®¿é®æéï¼`GRANT SELECT ON mall.# TO tyson`ï¼å è®¸ç¨æ·å¨mallæ°æ®åºææè¡¨ä½¿ç¨SELECTã æ¤éæéï¼`REVOKE SELECT, INSERT ON mall.* FROM tyson`ï¼è¢«æ¤éçè®¿é®æéå¿ é¡»åå¨ï¼å¦åä¼åºéã GRANTåREVOKEå¯å¨å ä¸ªå±æ¬¡ä¸æ§å¶è®¿é®æéï¼ - æ´ä¸ªæå¡å¨ï¼ä½¿ç¨GRANT ALLåREVOKE ALLï¼ - æ´ä¸ªæ°æ®åºï¼ä½¿ç¨ON database.*ï¼ - ç¹å®ç表ï¼ä½¿ç¨ON database.tableï¼ - ç¹å®çåï¼ - ç¹å®çåå¨è¿ç¨ã # æ§è½ä¼å 使ç¨EXPLAINè¯å¥è®©MySQLè§£éå®å°å¦ä½æ§è¡ä¸æ¡SELECTè¯å¥ã 妿ä¸ä¸ªç®åçWHEREåå¥è¿åç»ææè±çæ¶é´å¤ªé¿ï¼åå¯ä»¥æå®å ¶ä¸ä½¿ç¨çæäºåå°±æ¯éè¦ç´¢å¼ç对象ã é¿å 使ç¨ORãéè¿ä½¿ç¨å¤æ¡SELECTè¯å¥åè¿æ¥å®ä»¬çUNIONè¯å¥ï¼ä¼ææå¤§çæ§è½æ¹è¿ã LIKE徿 ¢ï¼æå¥½æ¯ä½¿ç¨FULLTEXTè䏿¯LIKEã å¾å¤é«æ§è½çåºç¨é½ä¼å¯¹å ³èæ¥è¯¢è¿è¡åè§£ï¼æå¦ä¸çä¼å¿ï¼ 1 ã让ç¼åæçæ´é«ã妿æå¼ 表å¾å°ååï¼é£ä¹åºäºè¯¥è¡¨çæ¥è¯¢å°±å¯ä»¥éå¤å©ç¨æ¥è¯¢ç¼åç»æã 2 ãå°æ¥è¯¢åè§£åï¼æ§è¡å个æ¥è¯¢å¯ä»¥åå°éçç«äºã 3 ãå¨åºç¨å±åå ³èï¼å¯ä»¥æ´å®¹æå¯¹æ°æ®åºè¿è¡æåï¼æ´å®¹æåå°é«æ§è½å坿©å±ã 4 ãæ¥è¯¢æ¬èº«æçä¹å¯è½ä¼æææåãä¾å¦ IN()代æ¿å ³èæ¥è¯¢ï¼å¯è½æ¯éæºçå ³èæ´é«æã 5 ãåå°åä½è®°å½å¾æ¥è¯¢ã 6 ãæ´è¿ä¸æ¥ï¼è¿æ ·åç¸å½äºå¨åºç¨ä¸å®ç°äºåå¸å ³èï¼è䏿¯ä½¿ç¨ MySQL å¾åµå¥å¾ªç¯å ³èãæäºåºæ¯åå¸å ³è徿çè¦é«å¾å¤ã # ç´¢å¼ ## åå»ºç´¢å¼ ALTER TABLEç¨æ¥å建æ®éç´¢å¼ãUNIQUEç´¢å¼æPRIMARY KEYç´¢å¼ã ```mysql ALTER TABLE table_name ADD INDEX index_name (column_list) ALTER TABLE table_name ADD UNIQUE (column_list) ALTER TABLE table_name ADD PRIMARY KEY (column_list) ``` CREATE INDEXå¯å¯¹è¡¨å¢å æ®éç´¢å¼æUNIQUEç´¢å¼ã ```mysql CREATE INDEX index_name ON table_name (column_list) CREATE UNIQUE INDEX index_name ON table_name (column_list) ``` å¨åå»ºç´¢å¼æ¶ï¼å¯ä»¥è§å®ç´¢å¼è½å¦å å«éå¤å¼ã妿ä¸å å«ï¼åç´¢å¼åºè¯¥å建为PRIMARY KEYæUNIQUEç´¢å¼ã ## å é¤ç´¢å¼ ```mysql DROP INDEX index_name ON talbe_name ALTER TABLE table_name DROP INDEX index_name ALTER TABLE table_name DROP PRIMARY KEY #åªæä¸ä¸ªä¸»é®ï¼ä¸éè¦æå®ç´¢å¼å ``` ## æ¥çç´¢å¼ ```mysql show index from tblname; show keys from tblname; ```