數(shù)據(jù)庫2

DQL:查詢語句

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

    * 排序方式:
        * ASC:升序叉寂,默認(rèn)的虱饿。
        * DESC:降序变过。

    * 注意:
        * 如果有多個排序條件崩泡,則當(dāng)前邊的條件值一樣時,才會判斷第二條件霹疫。


2. 聚合函數(shù):將一列數(shù)據(jù)作為一個整體钠右,進(jìn)行縱向的計算。
    1. count:計算個數(shù)
        1. 一般選擇非空的列:主鍵
        2. count(*)
    2. max:計算最大值
    3. min:計算最小值
    4. sum:計算和
    5. avg:計算平均值
    

    * 注意:聚合函數(shù)的計算掘譬,排除null值泰演。
        解決方案:
            1. 選擇不包含非空的列進(jìn)行計算
            2. IFNULL函數(shù)

3. 分組查詢:
    1. 語法:group by 分組字段;
    2. 注意:
        1. 分組之后查詢的字段:分組字段葱轩、聚合函數(shù)
        2. where 和 having 的區(qū)別睦焕?
            1. where 在分組之前進(jìn)行限定,如果不滿足條件靴拱,則不參與分組垃喊。having在分組之后進(jìn)行限定,如果不滿足結(jié)果袜炕,則不會被查詢出來
            2. where 后不可以跟聚合函數(shù)本谜,having可以進(jìn)行聚合函數(shù)的判斷。

        -- 按照性別分組偎窘。分別查詢男乌助、女同學(xué)的平均分

        SELECT sex , AVG(math) FROM student GROUP BY sex;
        
        -- 按照性別分組。分別查詢男陌知、女同學(xué)的平均分,人數(shù)
        
        SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
        
        --  按照性別分組他托。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人仆葡,不參與分組
        SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
        
        --  按照性別分組赏参。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?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. 公式:開始的索引 = (當(dāng)前的頁碼 - 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ù)進(jìn)行限定,保證數(shù)據(jù)的正確性嗡呼、有效性和完整性纸俭。  
* 分類:
    1. 主鍵約束:primary key
    2. 非空約束:not null
    3. 唯一約束:unique
    4. 外鍵約束:foreign key

* 非空約束:not null,某一列的值不能為null
    1. 創(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揍很,某一列的值不能重復(fù)
    1. 注意:
        * 唯一約束可以有NULL值郎楼,但是只能有一條記錄為null
    2. 在創(chuàng)建表時,添加唯一約束
        CREATE TABLE stu(
            id INT,
            phone_number VARCHAR(20) UNIQUE -- 手機(jī)號
        );
    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. 主鍵就是表中記錄的唯一標(biāo)識

    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,讓表于表產(chǎn)生關(guān)系膘融,從而保證數(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ù)庫的設(shè)計

1. 多表之間的關(guān)系
    1. 分類:
        1. 一對一(了解):
            * 如:人和身份證
            * 分析:一個人只有一個身份證,一個身份證只能對應(yīng)一個人
        2. 一對多(多對一):
            * 如:部門和員工
            * 分析:一個部門有多個員工脱货,一個員工只能對應(yīng)一個部門
        3. 多對多:
            * 如:學(xué)生和課程
            * 分析:一個學(xué)生可以選擇很多門課程岛都,一個課程也可以被很多學(xué)生選擇
    2. 實現(xiàn)關(guān)系:
        1. 一對多(多對一):
            * 如:部門和員工
            * 實現(xiàn)方式:在多的一方建立外鍵,指向一的一方的主鍵振峻。
        2. 多對多:
            * 如:學(xué)生和課程
            * 實現(xiàn)方式:多對多關(guān)系實現(xiàn)需要借助第三張中間表臼疫。中間表至少包含兩個字段,這兩個字段作為第三張表的外鍵铺韧,分別指向兩張表的主鍵
        3. 一對一(了解):
            * 如:人和身份證
            * 實現(xiàn)方式:一對一關(guān)系實現(xiàn)多矮,可以在任意一方添加唯一外鍵指向另一方的主鍵。

    3. 案例
        -- 創(chuàng)建旅游線路分類表 tab_category
        -- cid 旅游線路分類主鍵哈打,自動增長
        -- cname 旅游線路分類名稱非空塔逃,唯一,字符串 100
        CREATE TABLE tab_category (
            cid INT PRIMARY KEY AUTO_INCREMENT,
            cname VARCHAR(100) NOT NULL UNIQUE
        );
        
        -- 創(chuàng)建旅游線路表 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)
        );
        
        /*創(chuàng)建用戶表 tab_user
        uid 用戶主鍵,自增長
        username 用戶名長度 100氛改,唯一帐萎,非空
        password 密碼長度 30,非空
        name 真實姓名長度 100
        birthday 生日
        sex 性別胜卤,定長字符串 1
        telephone 手機(jī)號疆导,字符串 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)
        );
        
        /*
        創(chuàng)建收藏表 tab_favorite
        rid 旅游線路 id葛躏,外鍵
        date 收藏時間
        uid 用戶 id澈段,外鍵
        rid 和 uid 不能重復(fù)悠菜,設(shè)置復(fù)合主鍵,同一個用戶不能收藏同一個線路兩次
        */
        CREATE TABLE tab_favorite (
            rid INT, -- 線路id
            DATE DATETIME,
            uid INT, -- 用戶id
            -- 創(chuàng)建復(fù)合主鍵
            PRIMARY KEY(rid,uid), -- 聯(lián)合主鍵
            FOREIGN KEY (rid) REFERENCES tab_route(rid),
            FOREIGN KEY(uid) REFERENCES tab_user(uid)
        );

    
2. 數(shù)據(jù)庫設(shè)計的范式
    * 概念:設(shè)計數(shù)據(jù)庫時败富,需要遵循的一些規(guī)范悔醋。要遵循后邊的范式要求,必須先遵循前邊的所有范式要求

        設(shè)計關(guān)系數(shù)據(jù)庫時兽叮,遵從不同的規(guī)范要求芬骄,設(shè)計出合理的關(guān)系型數(shù)據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式充择,各種范式呈遞次規(guī)范德玫,越高的范式數(shù)據(jù)庫冗余越小。
        目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)椎麦、第二范式(2NF)、第三范式(3NF)材彪、巴斯-科德范式(BCNF)观挎、第四范式(4NF)和第五范式(5NF,又稱完美范式)段化。

    * 分類:
        1. 第一范式(1NF):每一列都是不可分割的原子數(shù)據(jù)項
        2. 第二范式(2NF):在1NF的基礎(chǔ)上嘁捷,非碼屬性必須完全依賴于碼(在1NF基礎(chǔ)上消除非主屬性對主碼的部分函數(shù)依賴)
            * 幾個概念:
                1. 函數(shù)依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值显熏。則稱B依賴于A
                    例如:學(xué)號-->姓名雄嚣。  (學(xué)號,課程名稱) --> 分?jǐn)?shù)
                2. 完全函數(shù)依賴:A-->B喘蟆, 如果A是一個屬性組缓升,則B屬性值得確定需要依賴于A屬性組中所有的屬性值。
                    例如:(學(xué)號蕴轨,課程名稱) --> 分?jǐn)?shù)
                3. 部分函數(shù)依賴:A-->B港谊, 如果A是一個屬性組,則B屬性值得確定只需要依賴于A屬性組中某一些值即可橙弱。
                    例如:(學(xué)號歧寺,課程名稱) -- > 姓名
                4. 傳遞函數(shù)依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值棘脐,在通過B屬性(屬性組)的值可以確定唯一C屬性的值斜筐,則稱 C 傳遞函數(shù)依賴于A
                    例如:學(xué)號-->系名,系名-->系主任
                5. 碼:如果在一張表中蛀缝,一個屬性或?qū)傩越M顷链,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該表的碼
                    例如:該表中碼為:(學(xué)號内斯,課程名稱)
                    * 主屬性:碼屬性組中的所有屬性
                    * 非主屬性:除過碼屬性組的屬性
                    
        3. 第三范式(3NF):在2NF基礎(chǔ)上蕴潦,任何非主屬性不依賴于其它非主屬性(在2NF基礎(chǔ)上消除傳遞依賴)

數(shù)據(jù)庫的備份和還原

1. 命令行:
    * 語法:
        * 備份: mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名稱 > 保存的路徑
        * 還原:
            1. 登錄數(shù)據(jù)庫: mysql -uroot -proot;
            2. 創(chuàng)建數(shù)據(jù)庫: create database db1(數(shù)據(jù)庫);
            3. 使用數(shù)據(jù)庫: use db1;
            4. 執(zhí)行文件: source 文件路徑
2. 圖形化工具:
        導(dǎo)出:右鍵數(shù)據(jù)庫-->轉(zhuǎn)儲sql文件-->結(jié)構(gòu)和數(shù)據(jù)
        導(dǎo)入:本地數(shù)據(jù)庫右鍵-->運行sql文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末像啼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潭苞,更是在濱河造成了極大的恐慌忽冻,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件此疹,死亡現(xiàn)場離奇詭異僧诚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝗碎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門湖笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹦骑,你說我怎么就攤上這事慈省。” “怎么了眠菇?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵边败,是天一觀的道長。 經(jīng)常有香客問我捎废,道長笑窜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任登疗,我火速辦了婚禮排截,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辐益。我一直安慰自己断傲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布荷腊。 她就那樣靜靜地躺著艳悔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪女仰。 梳的紋絲不亂的頭發(fā)上猜年,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音疾忍,去河邊找鬼乔外。 笑死,一個胖子當(dāng)著我的面吹牛一罩,可吹牛的內(nèi)容都是我干的杨幼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼差购!你這毒婦竟也來了四瘫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欲逃,失蹤者是張志新(化名)和其女友劉穎找蜜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稳析,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡洗做,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彰居。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诚纸。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖陈惰,靈堂內(nèi)的尸體忽然破棺而出畦徘,到底是詐尸還是另有隱情,我是刑警寧澤抬闯,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布旧烧,位于F島的核電站,受9級特大地震影響画髓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜平委,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一奈虾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧廉赔,春花似錦肉微、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至馏艾,卻和暖如春劳曹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琅摩。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工铁孵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人房资。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓蜕劝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岖沛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容