1. 程式人生 > >學習MySQL遇到的問題記錄

學習MySQL遇到的問題記錄

 最近在學校mysql,所有開篇部落格記錄在學習的過程遇到的一些問題,使用的是Navicat

1.mysql存在外來鍵時匯入資料

建立一個數據表有外來鍵約束,導致在插入資料時不成功,上網查詢後發現可以先把外來鍵約束關閉,插入完資料後,在把外來鍵約束開啟,

SET FOREIGN_KEY_CHECKS=0; //關閉

SET FOREIGN_KEY_CHECKS=1;//開啟

2.設定外來鍵約束

設定外來鍵關係的兩張表必須是相同的儲存引擎,如都是InnoDB,而且相關聯的兩個欄位的型別,長度都必須一致,外來鍵的好處是出入的資料必須是存在的,避免插入不必要的資料 

3.一次性插入多組資料

INSERT INTO 

[表名]([列名],[列名]) 

 VALUES

([列值],[列值])),

([列值],[列值])),

([列值],[列值]));

使用Navicat用上面的語句批量的插入資料一直不成功,不知道是什麼原因,心luilui

4.ORDER BY

ORDER BY子句對查詢結果按照一個或多個屬性列的升序(ASC)或降序(DESC)排列,預設為升序

查詢選修了3號課程的學生學號以及成績,查詢結果按成績降序排列

SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY Grade DESC;

5.GROUP BY 

GROUP BY子句將查詢結果按某一列或多列的值文組,值相等的為一組

求各個課程號以及相應的選課人數

SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno

該語句對查詢結果按Cno的值分組,所有具有相同Cno值的元祖為一組,然後對每一組用聚集函式COUNT進行計算

如果分組後還要求按一定的條件對這些組進行篩選,最終只輸出滿足指定條件的組,則可以使用HAVING短語指定篩選條件

查詢平均成績大於等於90分的學生學號和平均學號

SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=90;

WHERE子句作用於基本表或檢視,從中選擇滿足條件的元組,HAVING短語作用於組,從中選擇滿足條件的組。

6.字元匹配

%代表任意長度的字串,a%b表示以啊開頭,以b結尾的任意長度的字串 

_代表任意單個字元,a_b表示以a開頭,以b結尾的長度為3的任意字串

7.外連線

SELECT 欄位名稱 FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表1.欄位名 1=表名2.屬性名 2;

8.巢狀連線

巢狀連線的子查詢的SELECT語句中不能使用ORDER BY子句,其只對最終查詢結果排序

9.多表連線

a)內連線 

SELECT 列名... FROM 表一 INNER JOIN 表二 ON 表1.外來鍵=表2.主鍵

b)外連線,左連線能取得兩個表中鍵值一致的記錄以及只在左邊表中存在的記錄,右連線與之相反

 

SELECT 列名... FROM 表一 LEFT OUTER JOIN 表二 ON 表1.外來鍵=表2.主鍵//左連線


SELECT 列名... FROM 表一 RIGHT OUTER JOIN 表二 ON 表1.外來鍵=表2.主鍵//右連線