05數據庫複習02

 1.DQL:查詢語句(進階)

1.1 排序查詢

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

* 排序方式:
* ASC:升序,默認的。
* DESC:降序。sql

* 注意:
* 若是有多個排序條件,則當前邊的條件值同樣時,纔會判斷第二條件。數據庫

1.2 聚合函數

將一列數據做爲一個總體,進行縱向的計算。
1. count:計算個數數據庫設計

1. 通常選擇非空的列:主鍵
2. count(*)函數

2. max:計算最大值
3. min:計算最小值
4. sum:計算和
5. avg:計算平均值
工具

* 注意:聚合函數的計算,排除null值。
解決方案:ui

1. 選擇不包含非空的列進行計算
2. IFNULL函數spa

1.3 分組查詢

1. 語法:group by 分組字段;
2. 注意:命令行

1. 分組以後查詢的字段:分組字段、聚合函數
2. where 和 having 的區別?設計

1. where 在分組以前進行限定,若是不知足條件,則不參與分組。having在分組以後進行限定,若是不知足結果,則不會被查詢出來
2. where 後不能夠跟聚合函數,having能夠進行聚合函數的判斷。

1.4 分頁查詢

1. 語法:limit 開始的索引,每頁查詢的條數;
2. 公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數

3. limit 是一個MySQL"方言",只能在mysql數據庫中使用limit語法。

2.約束

概念: 對錶中的數據進行限定,保證數據的正確性、有效性和完整性。
分類:

   1. 非空約束:not null

   2. 惟一約束:unique

3. 主鍵約束:primary key

4. 外鍵約束:foreign key

2.1非空約束:not null,值不能爲null

1. 建立表時添加約束

 

2.2 惟一約束:unique,值不能重複

2.3 主鍵約束:primary key

注意:

1. 含義:非空且惟一
2. 一張表只能有一個字段爲主鍵
3. 主鍵就是表中記錄的惟一標識

 

2.4 外鍵約束

foreign key,讓表於表產生關係,從而保證數據的正確性。

CREATE TABLE emp (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(30),
age INT,
dep_name VARCHAR(30),
dep_location VARCHAR(30)
);
-- 添加數據
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('張三', 20, '研發部', '廣州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('李四', 21, '研發部', '廣州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('王五', 20, '研發部', '廣州');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('老王', 20, '銷售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('大王', 22, '銷售部', '深圳');
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES ('小王', 18, '銷售部', '深圳');

SELECT * FROM emp;

1.主表

2.從表

3. 添加數據

4.級聯操做

添加級聯操做
語法:ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ;

 

  分類:
    1. 級聯更新:ON UPDATE CASCADE
    2. 級聯刪除:ON DELETE CASCADE

2.數據庫的設計

2.1 多表之間的關係

1. 分類:

1. 一對一(瞭解):
* 如:人和身份證
* 分析:一我的只有一個身份證,一個身份證只能對應一我的
2. 一對多(多對一):
* 如:部門和員工
* 分析:一個部門有多個員工,一個員工只能對應一個部門
3. 多對多:
* 如:學生和課程
* 分析:一個學生能夠選擇不少門課程,一個課程也能夠被不少學生選擇

2. 實現關係:

  1. 一對多(多對一):
                 如:部門和員工
                 實現方式:在多的一方創建外鍵,指向一的一方的主鍵。

2. 一對多(多對一):
  如:部門和員工
  實現方式:在多的一方創建外鍵,指向一的一方的主鍵。

 

  3. 多對多:
                 如:學生和課程
                 實現方式:多對多關係實現須要藉助第三張中間表。中間表至少包含兩個字段,這兩個字段做爲第三張表的外鍵,分別指向兩張表的主鍵

 3.案例

CREATE DATABASE db1;
-- 建立旅遊線路分類表 tab_category
-- cid 旅遊線路分類主鍵,自動增加
-- cname 旅遊線路分類名稱非空,惟一,字符串 100
CREATE TABLE tab_category (
    cid INT PRIMARY KEY AUTO_INCREMENT,
    cname VARCHAR(100) NOT NULL UNIQUE
);

-- 建立旅遊線路表 tab_route
            /*
            rid 旅遊線路主鍵,自動增加
            rname 旅遊線路名稱非空,惟一,字符串 100
            price 價格
            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)
);

/*建立用戶表 tab_user
uid 用戶主鍵,自增加
username 用戶名長度 100,惟一,非空
password 密碼長度 30,非空
name 真實姓名長度 100
birthday 生日
sex 性別,定長字符串 1
telephone 手機號,字符串 11
email 郵箱,字符串長度 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)
);    

/*
建立收藏表 tab_favorite
rid 旅遊線路 id,外鍵
date 收藏時間
uid 用戶 id,外鍵
rid 和 uid 不能重複,設置複合主鍵,同一個用戶不能收藏同一個線路兩次
*/
CREATE TABLE tab_favorite (
    rid INT, -- 線路id
    DATE DATETIME,
    uid INT, -- 用戶id
    -- 建立複合主鍵
    PRIMARY KEY(rid,uid), -- 聯合主鍵
    FOREIGN KEY (rid) REFERENCES tab_route(rid),
    FOREIGN KEY(uid) REFERENCES tab_user(uid)
);



    

2.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基礎上消除傳遞依賴)

 

3.數據庫的備份和還原

     1. 命令行:
        * 語法:
            * 備份: mysqldump -u用戶名 -p密碼 數據庫名稱 > 保存的路徑

            * 還原:
                1. 登陸數據庫
                2. 建立數據庫
                3. 使用數據庫
                4. 執行文件。source 文件路徑

    

    2. 圖形化工具:

 

還原

  

相關文章
相關標籤/搜索