一、關鍵字DISTINCT是做用在全部列上的而不只僅是前置它的列。mysql
二、DESC關鍵字:若是想在多個列中進行降序排列,必須對每一個列指定DESC關鍵字。 如:正則表達式
SELECT * FROM table t ORDER BY t.a DESC, t.b DESC, t.c DESC;
三、MySQL在執行匹配時不區分大小寫。如WHERE t.name=」fuses」,能夠找到fuses、Fuses、fUses等。sql
四、MySQL在搜索匹配(用LIKE和通配符搜索匹配)時,區分大小寫。好比:LIKE ’jet%’ 不能匹配到 JetP、jEtPAAA等。安全
五、BETWEEN AND 是開區間。函數
六、SQL中,AND關鍵字的優先級比OR要高,因此會優先計算,要改變優先級,能夠用小括號。sqlserver
七、MySQL中的NOT : MySQL支持使用NOT對IN、BEWTEEN 和 EXSTS 字句取反,這與大多數其它DBMS容許使用NOT對各類條件取反有很大區別。性能
八、AVG()、COUNT()、MIN()、 MAX()忽略NULL行。code
九、爲在搜索子句中使用通配符,必須使用LIKE關鍵字。LIKE指示MySQL後面的搜索模式利用通配符匹配而不是直接相等匹配進行比較。server
十、通配符 (1) % :匹配任何字符出現任意次數。注意%匹配不了NULL;即便使用:select * from user where password LIKE '%',也匹配不了NULL,這個能夠語句會報錯。 (2) _ (下劃線):匹配一個字符(不能多也不能少)。排序
十一、MySQL與正則表達式結合使用,使用關鍵字REGEXP,如:
select * from user where password REGEXP '0';
十二、LIKE和REGEXP的區別: (1)LIKE匹配整個列; (2)REGEXP在列值內進行匹配; (3)LIKE匹配整個串而REGEXP匹配子串;
1三、注意:MySQL 中的正則表達式匹配(自從3.23.4後)不區分大小寫!!爲了區分大小寫,可使用BINARY關鍵字,如WHERE p.a REGEXP BINARY ‘hiSaaS’;
1四、多數正則表達式實現使用單個反斜槓(\)轉義特殊字符,以便能使用這些字符自己。但MySQL中要求使用兩個反斜槓(MySQL解析一個,正則表達式解析另一個)。
1五、正則中「^」有兩種用途: (1)用在「[ ]」裏面,表示對裏面的集合的否認; (2)不然,用做定位符,表示串的開始處。
1六、GROUP BY: (1)若是分組中有NULL值,則將NULL做爲一個分組; (2)GROUP BY必須在WHERE以後,ORDER BY以前分組。
1七、WHERE 和 HAVING的區別: (1)WHERE過濾行,HAVING過濾分組,全部的WHERE均可以由HAVING支持; (2)WHERE在數據分組前過濾,HAVING在數據分組後過濾。
1八、SELECT子句的順序: SELECT、 FROM、 WHERE、 GROUNP BY、 HAVING、 ORDER BY、 LIMIT
1九、應該保證全部聯結(如WHERE:a.id = b.id )都有WHERE子句,不然返回的是笛卡爾積的鏈接類型。
20、聯結(如WHERE:a.id = b.id )的表越多,性能越低。
2一、組合查詢: (1)有兩種兩狀況須要使用組合查詢的:
2二、如何在使用AUTO_INCREMENT列時得到這個值?可以使用last_insert_id()函數得到這個值,如 SELECT last_insert_id();
2三、外鍵不能跨引擎。外鍵(用於強制實施引用完整性)不能跨引擎,即便用同一個引擎的表不能引用具備使用不一樣引擎的表的外鍵。
2四、全文本搜索 引擎MyISAM支持全文本搜索,而InnoDB不支持。 (1)啓動全文搜索支持,使用FULLTEXT:
CREATE TABLE `productnotes` ( `note_id` int(11) NOT NULL AUTO_INCREMENT, `prod_id` int(11) DEFAULT NULL, `note_date` datetime DEFAULT NULL, `note_text` text, PRIMARY KEY (`note_id`), FULLTEXT KEY `note_text` (`note_text`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(2)能夠在建立表時指定全文搜索(FULLTEXT),也能夠在建好後稍後指定數據。不要在導入數據時使用FULLTEXT,由於更新索引須要花時間。 (3)全文搜索不區分大小寫。 (4)使用方式:
SELECT note_text, MATCH (note_text) AGAINST ('rabbit') AS rank FROM productnotes;
(5)查詢擴展:利用查詢擴展能夠找出可能相關的結果,即便它們並不精確包括所查找的詞,用法:
SELECT note_text, MATCH (note_text) AGAINST ('rabbit' WITH QUERY EXPANSION) AS rank FROM productnotes;
(6)布爾文本搜索方式(更加細緻的查找控制):
SELECT note_text, MATCH (note_text) AGAINST ('rabbit' IN BOOLEAN MODE) AS rank FROM productnotes;
2五、插入語句: (1)能夠在INSERT INTO之間添加關鍵字LOW_PRIORITY,指示MySQL下降INSERT語句的優先級,以提升總體性能,以下:
INSERT LOW_PRORITY INTO
(2)INSERT SELECT 語句用法(插入檢索出的數據):
INSERT INTO productnotes(prod_id) SELECT product.code FROM product;
2六、更新語句: (1)在UPDATE語句中使用SELECT子查詢:
UPDATE productnotes p, (SELECT product.num, product.id FROM product ) temp SET p.note_text=temp.num WHERE temp.id = p.prod_id;
UPDATE IGNORE product SET ……
2七、刪除語句DELECT:
2八、ALTER TABLE的一種常見用途是定義外鍵,如:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_products FOREIGN KEY( order_num ) REFERENCES orders(order_num);
2九、視圖的規則和限制 (1)與表同樣,視圖必須惟一命名(且不能與表名相同)。 (2)對於能夠建立的視圖數目沒有限制。 (3)爲了建立視圖,必須具體足夠的訪問權限。 (4)視圖能夠嵌套,便可以利用從其它視圖中檢索數據的查詢來構造一個視圖。 (5)ORDER BY能夠在視圖中,但若是從該視圖檢索數據的SELECT語句中也含有ORDER BY,那麼該視圖中的ORDER BY將被覆蓋。 (6)視圖不能索引,也不能有關聯的觸發器或者默認值。 (7)視圖能夠和表一塊兒使用。
30、存儲過程
3一、不像大多的DBMS,MySQL遊標只能用於存儲過程(和函數)。
3二、一個使用觸發器後的實際例子:在插入數據後,返回剛插入數據的id。 觸發器的寫法例子:
CREATE TRIGGER neworder_tri ALTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num; 3三、MySQL是默認自動提交全部更改的,若是須要修改則使用:SET autocommit = 0;
3四、校對在對用ORDER BY子句檢索出來的數據排序時起重要的做用。若是你須要用與建立表時不一樣的校對順序排序特定的SELECT語句,能夠在SELECT語句自身中進行:
SELECT * FROM customers ORDER BY lastname, firstname COLLATE latin1_general_cs;
解釋:latin1_general_cs是一種檢驗,其中COLLATE是使用校驗的關鍵字。
3五、COLLATE除了使用在SELECT裏面,還能夠用於GROUP BY、HAVING、彙集函數、別名等。
3六、建立用戶帳戶: CREAT USER ben IDENTIFIED BY ‘password’; 解釋:IDENTIFIED BY ‘password’表示給用戶一個口令。
3七、官網資料:https://dev.mysql.com/doc/