MYSQL約束
- 2019 年 10 月 10 日
- 筆記
排序
select * from std_old order by age asc;#對錶std_old進行age欄位升序排列
select * from std_old order by age desc;#對錶std_old進行age欄位降序排列
select * from std order by math desc,age asc;#對std表進行排序,首先是math的降序,相同則對age升序
聚合


聚合函數忽略空值
select count(id) as 總人數 from std;#統計不含NULL的數據條數
select count(ifnull(id,0)) from std;#統計所有個數,如果為null則用0替代
此外還可以使用max、min、avg、sum函數。
分組
因分組後返回每組第一個數據,一般和聚合函數一起使用
select sex,count(*) from std group by sex;#查看男女性別人數
select sex,avg(math) from std group by sex;#分組計算平局分
select sex,count(*) from std where age>25 group by sex;#性別分組,計算大於25歲中的性別人數
select sex,count(*) from std where age>25 group by sex having count(*)>2;#分組顯示資訊再添加過濾條件。

limit語句
select * from std1 limit 2,6;#顯示資訊從第2條開始,顯示6條。
select * from std1 limit 6;#顯示從0開始共6條數據。
資料庫備份與還原
mysqldump -uroot -p1 db2 > d:/db2.sql
備份資料庫db2到本地磁碟d根目錄中
還原:create database db2;
use db2;
source d:db2.sql;
即可
約束:

刪除主鍵:
alter table st5 drop primary key;
添加主鍵:
alter table st5 add primary key(id);
alter table std5 change id id int auto_increment;#設置主鍵自增
alter table std5 auto_increment=1000;#設置主鍵起始值

#或創建表時確定
alter table std5 change test test varchar(10) unique;#設置唯一約束(null不存在重複問題)

alter table std5 change name name varchar(20) not null;#設置非空約束

alter table std5 change age age int default 99;#設置默認值

#添加記錄時不輸入或輸入default對應使用默認值

外鍵約束


alter table employee drop foreign key emp_depid_fk;#刪除外鍵約束
alter table employee add constraint emp_depid_fk foreign key (dep_id) references department(id);
在表存在的情況下創建外鍵約束。
級聯操作


#創建帶級聯操作的外鍵約束表
#添加數據後,該表的外鍵約束更新和刪除級聯
表間關係

數據規範化
目前關係資料庫有六種範式:第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、巴斯-科德範式(BCNF)、第四範式(4NF)和第五範式(5NF,又稱完美範式)。
在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式(2NF),其餘範式以次類推。一般說來,資料庫只需滿足第三範式(3NF)。
第一範式每一列不可再拆分,稱為原子性
第二範式的特點:
1) 一張表只描述一件事情。
2) 表中的每一列都完全依賴於主鍵
如:

第三範式:
任何非主列不得傳遞依賴於主鍵。所謂傳遞依賴,指的是如果存在"A → B → C"的決定關係,則C傳遞依賴於A。因此,滿足第三範式的資料庫表應該不存在如下依賴關係:主鍵列 → 非主鍵列x → 非主鍵列y

