day03【MySQL約束】

今日內容

  • DQL:查詢語句
    1. 排序查詢
    2. 聚合函數
    3. 分組查詢
    4. 分頁查詢
  • 約束
  • 多表之間的關係
  • 範式
  • 數據庫的備份和還原

1 DQL:查詢語句

  • 排序查詢
    1. 語法:order by 子句
      *oreder by 排序字段1 排序方式1, 排序字段2 排序方式2…
    2. 排序方式:
      *ASC:升序,默認。
      · *DESC:降序
    3. 注意:
      *如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件。
  • 聚合函數:將一列數據作爲一個整體,進行縱向的計算
    1. count:計算個數
      * 一般選擇非空的列
      * count(*)
    2. max:計算最大值
    3. min:計算最小值
    4. sum:計算和
    5. avg:計算平均值
      *注意:聚合函數的計算,排除null值。
      解決方案:1.選擇不包含非空的列進行計算。2.IFNULL函數
  • 分組查詢
    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;

注意:分組和聚合都是在一起配合着使用的,在分組之前我們對錶中的數據每一條每一條的過濾,使用where,因爲是單獨的數據,所以where後面不能加聚合函數,在分組後,我對整體進行過濾使用HAVING,而分組後 的數據是一個整體,所以在HAVING後可以使用聚合函數,分組之後進行排序,一般都使用聚合後的字段進行排序,否則是沒有意義的,但是聚合函數的可讀性不強,所以我們都會對聚合字段其別名

  • 分頁查詢
    1. 語法:limit開始的索引,每頁查詢的條數;
    2. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
    3. select * from student limit 0,3;
      limit是一個MySQL“方言”

2 約束

  • 概念:對錶中的數據進行限定,保證數據的正確性、有效性和完整性
  • 分類
    1.主鍵約束:primary key
    1. 非空約束:not null
    2. 唯一約束:unique
    3. 外鍵約束:foreign key
  • 非空約束:not null 值不能爲null
	1. 創建表時添加約束
create table stu(
	id int,
	name varchar(20) not null
);
	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. 注意:
    1. 含義:非空且唯一
    2. 一張表只能有一個字段爲主鍵
    3. 主鍵就是表中記錄的唯一標識
	2.在創建表時,添加主鍵約束
create table stu(
	id int primary key,
	name varchar(20)
);
	3. 刪除主鍵
alter table stu drop primary key;
	4. 創建完表後,添加主鍵
alter table stu modify id int primary key;
	5. 自動增長
		1. 概念:如果某一列是數值類型,可以使用auto_increment完成值的自動增長
		2. 在創建表時,添加主鍵約束並完成主鍵自增長
		create table stu(
			id int primary key auto_increment,
			name varchar(20)
		);
		3. 刪除自動增長
		alter table stu modify id int;
		4. 添加自動增長
		alter table stu modify id int auto_increment;
  • 外鍵約束:foreign key,讓表與表產生關係,從而保證數據的正確性。
	1. 在創建表時,可以添加外鍵
		語法:
		create table 表名(
			....
			外鍵列,
			constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
		);
		constraint 外鍵名稱:可省略
	2. 刪除外鍵
	alter table 表名 drop foreing key 外鍵名稱;
	3. 創建表之後,添加外鍵
	alter table 表名 add constraint 外鍵名稱 foreign key (外鍵字段名稱) references 主表名稱(主表列名稱);
	4. 級聯操作
		1. 添加級聯操作
		語法:alter table 表名 add constraint 外鍵名稱
			foreign key (外鍵字段名稱) references 主表名稱(主表列名) on update cascade on delete casecade;
		2. 分類:
			1. 級聯更新:on update cascade
			2. 級聯刪除:on delete cascade

3 數據庫的設計

4 數據庫的備份和還原

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章