MySQL基礎-2

1. DQL:查詢語句
	1. 排序查詢
	2. 聚合函數
	3. 分組查詢
	4. 分頁查詢

2. 約束
3. 多表之間的關係
4. 範式
5. 數據庫的備份和還原

DQL:查詢語句

1. 排序查詢
	* 語法:order by 子句
		* order by 排序字段1 排序方式1, 排序字段2 排序方式2...

	* 排序方式:
		* ASC:升序,默認的		ascend
		* DESC:降序			   descend
	* 注意:
		* 如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件。

2. 聚合函數:將一列數據作爲一個整體,進行縱向的計算。
	1. count:計算個數
		1. 一般選擇非空的列:主鍵
		2. count(*)
	2. max:計算最大值
	3. min:計算最小值
	4. sum:計算和
	5. avg:計算平均值	
	* 注意:聚合函數的計算,需要排除null值。
		解決方案:
			1. 選擇不包含非空的列進行計算
			2. IFNULL函數 count(IFNULL(列名稱,0))

3. 分組查詢:
	1. 語法:group by 分組字段;
	2. 注意:
		1. 分組之後查詢的字段:分組字段、聚合函數
		2. where 和 having 的區別?
			1. where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
			2. where 後不可以跟聚合函數,having可以進行聚合函數的判斷。

		-- 按照性別分組。分別查詢男、女同學的數學平均分
		SELECT sex , AVG(math) FROM student GROUP BY sex;
		
		-- 按照性別分組。分別查詢男、女同學的數學平均分、人數
		SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
		
		-- 按照性別分組。分別查詢男、女同學的數學平均分、人數 要求:分數低於70分的人,不參與分組
		SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
		
		-- 按照性別分組。分別查詢男、女同學的平均分,人數 要求:分數低於70分的人,不參與分組,分組之後。人數要大於2個人
		SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
		SELECT sex , AVG(math),COUNT(id) 人數 FROM student WHERE math > 70 GROUP BY sex HAVING 人數 > 2;
4.分頁查詢
	1. 語法:limit 開始的索引,每頁查詢的條數;
	2. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
	-- 每頁顯示3條記錄
	SELECT * FROM student LIMIT 0,3; -- 第1頁
	SELECT * FROM student LIMIT 3,3; -- 第2頁
	SELECT * FROM student LIMIT 6,3; -- 第3頁
	3. limit 是一個MySQL"方言"

約束

1. 概念: 對錶中的數據進行限定,保證數據的正確性、有效性和完整性。	
分類:
	1. 主鍵約束:primary key
	2. 非空約束:not null
	3. 唯一約束:unique
	4. 外鍵約束:foreign key

* 非空約束:not null,值不能爲null
	1. 創建表時添加約束
		CREATE TABLE stu(
			id INT,
			NAME VARCHAR(20) NOT NULL -- name爲非空
		);
	2. 創建表完後,添加非空約束
		ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

	3. 刪除name的非空約束
		ALTER TABLE stu MODIFY NAME VARCHAR(20);

* 唯一約束:unique,值不能重複
	1.創建表時,添加唯一約束
		CREATE TABLE stu(
		   id INT,
		   phone_number VARCHAR(20) UNIQUE -- 添加了唯一約束
		);
	##注意mysql中,唯一約束限定的列的值可以有多個null
	2. 刪除唯一約束(唯一索引)
		ALTER TABLE stu DROP INDEX phone_number;
	3. 在創建表後,添加唯一約束
		ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

* 主鍵約束:primary key

	1. 注意:
		* 含義:非空且唯一
		* 一張表只能有一個字段爲主鍵,是表中記錄儀的唯一標識
	2. 在創建表時,添加主鍵約束
		create table stu(
			id int primary key,-- 給id添加主鍵約束
			name varchar(20)
		);
	3. 刪除主鍵
		ALTER TABLE stu DROP PRIMARY KEY;
	4. 創建完表後,添加主鍵
		ALTER TABLE stu MODIFY id INT PRIMARY KEY;
	5. 自動增長:
		* 概念:如果某一列是數值類型的,使用 auto_increment 可以來完成值的自動增長
		* 在創建表時,添加主鍵約束,並且完成主鍵自增長
			create table stu(
				id int primary key auto_increment,-- 給id添加主鍵約束
				name varchar(20)
			);
		* 刪除自動增長
      		ALTER TABLE stu MODIFY id INT;
		* 添加自動增長
      		ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

* 外鍵約束:foreign key,讓表與表產生關係,從而保證數據的正確性

	1. 在創建表時,可以添加外鍵
		create table 表名(
			....
			外鍵列
			constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
		);

	2. 刪除外鍵
		ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;

	3. 創建表之後,添加外鍵
		ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);
	4. 級聯操作
   	* 外鍵可以爲NULL,但是不能爲外鍵索引不存在的值
   	* 添加級聯操作
      語法:ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 
						FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE;
 	* 分類:
      	1. 級聯更新:ON UPDATE CASCADE
      	2. 級聯刪除:ON DELETE CASCADE

數據庫的設計

1. 多表之間的關係
	1. 分類:
		1. 一對一:
			* 如:人和身份證
			* 分析:一個人只有一個身份證,一個身份證只能對應一個人
		2. 一對多(多對一):
			* 如:部門和員工
			* 分析:一個部門有多個員工,一個員工只能對應一個部門
		3. 多對多:
			* 如:學生和課程
			* 分析:一個學生可以選擇很多門課程,一個課程也可以被很多學生選擇
	2. 實現關係:
		1. 一對多(多對一):
			* 如:部門和員工
			* 實現方式:在多的一方建立外鍵,指向單一的一方的主鍵。
		2. 多對多:
			* 如:學生和課程
			* 實現方式:多對多關係實現需要藉助第三張中間表。中間表至少包含兩個字段,這兩個字段作爲第三張表的外鍵,分別指向兩張表的主鍵
		3. 一對一:
			* 如:人和身份證
			* 實現方式:一對一關係實現,可以在任意一方添加【唯一外鍵】指向另一方的主鍵。

2. 數據庫設計的範式
	* 概念:設計數據庫時,需要遵循的一些規範。要遵循後邊的範式要求,必須先遵循前邊的所有範式要求


		設計關係數據庫時,遵從不同的規範要求,設計出合理的關係型數據庫,這些不同的規範要求被稱爲不同的範式,各種範式呈遞次規範,越高的範式數據庫冗餘越小。
		目前關係數據庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。

	* 分類:
		1. 第一範式(1NF):每一列都是不可分割的原子數據項
		2. 第二範式(2NF):在1NF的基礎上,非碼屬性必須完全依賴於碼(在1NF基礎上消除非主屬性對主碼的部分函數依賴)
			* 幾個概念:
				1. 函數依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值。則稱B依賴於A
					例如:學號-->姓名。  (學號,課程名稱) --> 分數
				2. 完全函數依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定需要依賴於A屬性組中所有的屬性值。
					例如:(學號,課程名稱) --> 分數
				3. 部分函數依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定只需要依賴於A屬性組中某一些值即可。
					例如:(學號,課程名稱) -- > 姓名
				4. 傳遞函數依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,在通過B屬性(屬性組)的值可以確定唯一C屬性的值,則稱 C 傳遞函數依賴於A
					例如:學號-->系名,系名-->系主任
				5. 碼:如果在一張表中,一個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)爲該表的碼
					例如:該表中碼爲:(學號,課程名稱)
					* 主屬性:碼屬性組中的所有屬性
					* 非主屬性:除過碼屬性組的屬性
					
		3. 第三範式(3NF):在2NF基礎上,任何非主屬性不依賴於其它非主屬性(在2NF基礎上消除傳遞依賴)

數據庫的備份和還原

1. 命令行:
	* 語法:
		* 備份: mysqldump -u用戶名 -p密碼 數據庫名稱 > 保存的路徑
		* 還原:
			1. 登錄數據庫
			2. 創建數據庫
			3. 使用數據庫
			4. 執行文件。source 文件路徑
2. 圖形化工具
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章