MySQL约束课堂笔记
生活随笔
收集整理的這篇文章主要介紹了
MySQL约束课堂笔记
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
今日內容
1. DQL:查詢語句1. 排序查詢2. 聚合函數(shù)3. 分組查詢4. 分頁查詢2. 約束 3. 多表之間的關系 4. 范式 5. 數(shù)據(jù)庫的備份和還原DQL:查詢語句
1. 排序查詢* 語法:order by 子句* order by 排序字段1 排序方式1 , 排序字段2 排序方式2...* 排序方式:* ASC:升序,默認的。* DESC:降序。* 注意:* 如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件。2. 聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進行縱向的計算。1. count:計算個數(shù)1. 一般選擇非空的列:主鍵2. count(*)2. max:計算最大值3. min:計算最小值4. sum:計算和5. avg:計算平均值* 注意:聚合函數(shù)的計算,排除null值。解決方案:1. 選擇不包含非空的列進行計算2. IFNULL函數(shù)3. 分組查詢:1. 語法:group by 分組字段;2. 注意:1. 分組之后查詢的字段:分組字段、聚合函數(shù)2. where 和 having 的區(qū)別?1. where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之后進行限定,如果不滿足結果,則不會被查詢出來2. where 后不可以跟聚合函數(shù),having可以進行聚合函數(shù)的判斷。-- 按照性別分組。分別查詢男、女同學的平均分SELECT sex , AVG(math) FROM student GROUP BY sex;-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù)SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù) 要求:分數(shù)低于70分的人,不參與分組SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;-- 按照性別分組。分別查詢男、女同學的平均分,人數(shù) 要求:分數(shù)低于70分的人,不參與分組,分組之后。人數(shù)要大于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) 人數(shù) FROM student WHERE math > 70 GROUP BY sex HAVING 人數(shù) > 2;4. 分頁查詢1. 語法:limit 開始的索引,每頁查詢的條數(shù);2. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數(shù)-- 每頁顯示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"方言"約束
* 概念: 對表中的數(shù)據(jù)進行限定,保證數(shù)據(jù)的正確性、有效性和完整性。 * 分類:1. 主鍵約束:primary key2. 非空約束:not null3. 唯一約束:unique4. 外鍵約束:foreign key* 非空約束:not null,某一列的值不能為null1. 創(chuàng)建表時添加約束CREATE TABLE stu(id INT,NAME VARCHAR(20) NOT NULL -- name為非空);2. 創(chuàng)建表完后,添加非空約束ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;3. 刪除name的非空約束ALTER TABLE stu MODIFY NAME VARCHAR(20);* 唯一約束:unique,某一列的值不能重復1. 注意:* 唯一約束可以有NULL值,但是只能有一條記錄為null2. 在創(chuàng)建表時,添加唯一約束CREATE TABLE stu(id INT,phone_number VARCHAR(20) UNIQUE -- 手機號);3. 刪除唯一約束ALTER TABLE stu DROP INDEX phone_number;4. 在表創(chuàng)建完后,添加唯一約束ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;* 主鍵約束:primary key。1. 注意:1. 含義:非空且唯一2. 一張表只能有一個字段為主鍵3. 主鍵就是表中記錄的唯一標識2. 在創(chuàng)建表時,添加主鍵約束create table stu(id int primary key,-- 給id添加主鍵約束name varchar(20));3. 刪除主鍵-- 錯誤 alter table stu modify id int ;ALTER TABLE stu DROP PRIMARY KEY;4. 創(chuàng)建完表后,添加主鍵ALTER TABLE stu MODIFY id INT PRIMARY KEY;5. 自動增長:1. 概念:如果某一列是數(shù)值類型的,使用 auto_increment 可以來完成值得自動增長2. 在創(chuàng)建表時,添加主鍵約束,并且完成主鍵自增長create table stu(id int primary key auto_increment,-- 給id添加主鍵約束name varchar(20));3. 刪除自動增長ALTER TABLE stu MODIFY id INT;4. 添加自動增長ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;* 外鍵約束:foreign key,讓表于表產生關系,從而保證數(shù)據(jù)的正確性。1. 在創(chuàng)建表時,可以添加外鍵* 語法:create table 表名(....外鍵列constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱));2. 刪除外鍵ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;3. 創(chuàng)建表之后,添加外鍵ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);4. 級聯(lián)操作1. 添加級聯(lián)操作語法:ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ;2. 分類:1. 級聯(lián)更新:ON UPDATE CASCADE 2. 級聯(lián)刪除:ON DELETE CASCADE數(shù)據(jù)庫的設計
1. 多表之間的關系1. 分類:1. 一對一(了解):* 如:人和身份證* 分析:一個人只有一個身份證,一個身份證只能對應一個人2. 一對多(多對一):* 如:部門和員工* 分析:一個部門有多個員工,一個員工只能對應一個部門3. 多對多:* 如:學生和課程* 分析:一個學生可以選擇很多門課程,一個課程也可以被很多學生選擇2. 實現(xiàn)關系:1. 一對多(多對一):* 如:部門和員工* 實現(xiàn)方式:在多的一方建立外鍵,指向一的一方的主鍵。2. 多對多:* 如:學生和課程* 實現(xiàn)方式:多對多關系實現(xiàn)需要借助第三張中間表。中間表至少包含兩個字段,這兩個字段作為第三張表的外鍵,分別指向兩張表的主鍵3. 一對一(了解):* 如:人和身份證* 實現(xiàn)方式:一對一關系實現(xiàn),可以在任意一方添加唯一外鍵指向另一方的主鍵。3. 案例-- 創(chuàng)建旅游線路分類表 tab_category-- cid 旅游線路分類主鍵,自動增長-- cname 旅游線路分類名稱非空,唯一,字符串 100CREATE TABLE tab_category (cid INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(100) NOT NULL UNIQUE);-- 創(chuàng)建旅游線路表 tab_route/*rid 旅游線路主鍵,自動增長rname 旅游線路名稱非空,唯一,字符串 100price 價格rdate 上架時間,日期類型cid 外鍵,所屬分類*/CREATE TABLE tab_route(rid INT PRIMARY KEY AUTO_INCREMENT,rname VARCHAR(100) NOT NULL UNIQUE,price DOUBLE,rdate DATE,cid INT,FOREIGN KEY (cid) REFERENCES tab_category(cid));/*創(chuàng)建用戶表 tab_useruid 用戶主鍵,自增長username 用戶名長度 100,唯一,非空password 密碼長度 30,非空name 真實姓名長度 100birthday 生日sex 性別,定長字符串 1telephone 手機號,字符串 11email 郵箱,字符串長度 100*/CREATE TABLE tab_user (uid INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(100) UNIQUE NOT NULL,PASSWORD VARCHAR(30) NOT NULL,NAME VARCHAR(100),birthday DATE,sex CHAR(1) DEFAULT '男',telephone VARCHAR(11),email VARCHAR(100));/*創(chuàng)建收藏表 tab_favoriterid 旅游線路 id,外鍵date 收藏時間uid 用戶 id,外鍵rid 和 uid 不能重復,設置復合主鍵,同一個用戶不能收藏同一個線路兩次*/CREATE TABLE tab_favorite (rid INT, -- 線路idDATE DATETIME,uid INT, -- 用戶id-- 創(chuàng)建復合主鍵PRIMARY KEY(rid,uid), -- 聯(lián)合主鍵FOREIGN KEY (rid) REFERENCES tab_route(rid),FOREIGN KEY(uid) REFERENCES tab_user(uid));2. 數(shù)據(jù)庫設計的范式* 概念:設計數(shù)據(jù)庫時,需要遵循的一些規(guī)范。要遵循后邊的范式要求,必須先遵循前邊的所有范式要求設計關系數(shù)據(jù)庫時,遵從不同的規(guī)范要求,設計出合理的關系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫冗余越小。目前關系數(shù)據(jù)庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。* 分類:1. 第一范式(1NF):每一列都是不可分割的原子數(shù)據(jù)項2. 第二范式(2NF):在1NF的基礎上,非碼屬性必須完全依賴于碼(在1NF基礎上消除非主屬性對主碼的部分函數(shù)依賴)* 幾個概念:1. 函數(shù)依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值。則稱B依賴于A例如:學號-->姓名。 (學號,課程名稱) --> 分數(shù)2. 完全函數(shù)依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定需要依賴于A屬性組中所有的屬性值。例如:(學號,課程名稱) --> 分數(shù)3. 部分函數(shù)依賴:A-->B, 如果A是一個屬性組,則B屬性值得確定只需要依賴于A屬性組中某一些值即可。例如:(學號,課程名稱) -- > 姓名4. 傳遞函數(shù)依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值,在通過B屬性(屬性組)的值可以確定唯一C屬性的值,則稱 C 傳遞函數(shù)依賴于A例如:學號-->系名,系名-->系主任5. 碼:如果在一張表中,一個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該表的碼例如:該表中碼為:(學號,課程名稱)* 主屬性:碼屬性組中的所有屬性* 非主屬性:除過碼屬性組的屬性3. 第三范式(3NF):在2NF基礎上,任何非主屬性不依賴于其它非主屬性(在2NF基礎上消除傳遞依賴)數(shù)據(jù)庫的備份和還原
1. 命令行:* 語法:* 備份: mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名稱 > 保存的路徑* 還原:1. 登錄數(shù)據(jù)庫2. 創(chuàng)建數(shù)據(jù)庫3. 使用數(shù)據(jù)庫4. 執(zhí)行文件。source 文件路徑 2. 圖形化工具:總結
以上是生活随笔為你收集整理的MySQL约束课堂笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL基础课堂笔记
- 下一篇: MySQL多表事务课堂笔记