MYSQL約束

1. DQL:查詢語句

1. 排序查詢

2. 聚合函數(shù)

3. 分組查詢

4. 分頁查詢

2. 約束

3. 多表之間的關(guān)系

4. 范式

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

# DQL:查詢語句

1. 排序查詢

* 語法:order by 子句

* order by 排序字段1 排序方式1 饱苟,? 排序字段2 排序方式2...

select * from student order by math desc;

* 排序方式:

* ASC:升序撩笆,默認(rèn)的衡查。

* DESC:降序匙睹。

* 注意:

* 如果有多個(gè)排序條件宠叼,則當(dāng)前邊的條件值一樣時(shí)劫拢,才會判斷第二條件搓幌。

2. 聚合函數(shù):將一列數(shù)據(jù)作為一個(gè)整體,進(jìn)行縱向的計(jì)算。

1. count:計(jì)算個(gè)數(shù)

1. 一般選擇非空的列:主鍵

2. count(*)

2. max:計(jì)算最大值

3. min:計(jì)算最小值

4. sum:計(jì)算和

5. avg:計(jì)算平均值

* 注意:聚合函數(shù)的計(jì)算侨歉,排除null值屋摇。

解決方案:

1. 選擇不包含非空的列進(jìn)行計(jì)算

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個(gè)人

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 是一個(gè)MySQL"方言"

## 約束

* 概念: 對表中的數(shù)據(jù)進(jìn)行限定愧哟,保證數(shù)據(jù)的正確性、有效性和完整性霞赫。

* 分類:

1. 主鍵約束:primary key

2. 非空約束:not null

3. 唯一約束:unique

4. 外鍵約束:foreign key

* 非空約束:not null端衰,值不能為null

1. 創(chuàng)建表時(shí)添加約束

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. 創(chuàng)建表時(shí)腾节,添加唯一約束

CREATE TABLE stu(

id INT,

phone_number VARCHAR(20) UNIQUE -- 添加了唯一約束

);

* 注意mysql中荤牍,唯一約束限定的列的值可以有多個(gè)null

2. 刪除唯一約束

ALTER TABLE stu DROP INDEX phone_number;

3. 在創(chuàng)建表后康吵,添加唯一約束

ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;

* 主鍵約束:primary key晦嵌。

1. 注意:

1. 含義:非空且唯一

2. 一張表只能有一個(gè)字段為主鍵

3. 主鍵就是表中記錄的唯一標(biāo)識

2. 在創(chuàng)建表時(shí)耍铜,添加主鍵約束

create table stu(

id int primary key,-- 給id添加主鍵約束

name varchar(20)

);

3. 刪除主鍵

-- 錯(cuò)誤 alter table stu modify id int ;

ALTER TABLE stu DROP PRIMARY KEY;

4. 創(chuàng)建完表后棕兼,添加主鍵

ALTER TABLE stu MODIFY id INT PRIMARY KEY;

5. 自動(dòng)增長:

1.? 概念:如果某一列是數(shù)值類型的伴挚,使用 auto_increment 可以來完成值得自動(dòng)增長

2. 在創(chuàng)建表時(shí)茎芋,添加主鍵約束颅眶,并且完成主鍵自增長

create table stu(

id int primary key auto_increment,-- 給id添加主鍵約束

name varchar(20)

);

3. 刪除自動(dòng)增長

ALTER TABLE stu MODIFY id INT;

4. 添加自動(dòng)增長

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

* 外鍵約束:foreign key,讓表于表產(chǎn)生關(guān)系,從而保證數(shù)據(jù)的正確性涛酗。

1. 在創(chuàng)建表時(shí),可以添加外鍵

* 語法:

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è)計(jì)

1. 多表之間的關(guān)系

1. 分類:

1. 一對一(了解):

* 如:人和身份證

* 分析:一個(gè)人只有一個(gè)身份證,一個(gè)身份證只能對應(yīng)一個(gè)人

2. 一對多(多對一):

* 如:部門和員工

* 分析:一個(gè)部門有多個(gè)員工剖笙,一個(gè)員工只能對應(yīng)一個(gè)部門

3. 多對多:

* 如:學(xué)生和課程

* 分析:一個(gè)學(xué)生可以選擇很多門課程卵洗,一個(gè)課程也可以被很多學(xué)生選擇

2. 實(shí)現(xiàn)關(guān)系:

1. 一對多(多對一):

* 如:部門和員工

* 實(shí)現(xiàn)方式:在多的一方建立外鍵,指向一的一方的主鍵过蹂。

2. 多對多:

* 如:學(xué)生和課程

* 實(shí)現(xiàn)方式:多對多關(guān)系實(shí)現(xiàn)需要借助第三張中間表。中間表至少包含兩個(gè)字段榴啸,這兩個(gè)字段作為第三張表的外鍵鸥印,分別指向兩張表的主鍵

3. 一對一(了解):

* 如:人和身份證

* 實(shí)現(xiàn)方式:一對一關(guān)系實(shí)現(xiàn)库说,可以在任意一方添加唯一外鍵指向另一方的主鍵片择。

3. 案例

-- 創(chuàng)建旅游線路分類表 tab_category

-- cid 旅游線路分類主鍵字管,自動(dòng)增長

-- cname 旅游線路分類名稱非空啰挪,唯一,字符串 100

CREATE TABLE tab_category (

cid INT PRIMARY KEY AUTO_INCREMENT,

cname VARCHAR(100) NOT NULL UNIQUE

);

-- 創(chuàng)建旅游線路表 tab_route

/*

rid 旅游線路主鍵嘲叔,自動(dòng)增長

rname 旅游線路名稱非空亡呵,唯一,字符串 100

price 價(jià)格

rdate 上架時(shí)間硫戈,日期類型

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 真實(shí)姓名長度 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 收藏時(shí)間

uid 用戶 id铸题,外鍵

rid 和 uid 不能重復(fù)铡恕,設(shè)置復(fù)合主鍵,同一個(gè)用戶不能收藏同一個(gè)線路兩次

*/

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è)計(jì)的范式

* 概念:設(shè)計(jì)數(shù)據(jù)庫時(shí)回挽,需要遵循的一些規(guī)范没咙。要遵循后邊的范式要求猩谊,必須先遵循前邊的所有范式要求

設(shè)計(jì)關(guān)系數(shù)據(jù)庫時(shí)千劈,遵從不同的規(guī)范要求,設(shè)計(jì)出合理的關(guān)系型數(shù)據(jù)庫牌捷,這些不同的規(guī)范要求被稱為不同的范式墙牌,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫冗余越小暗甥。

目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)喜滨、第二范式(2NF)、第三范式(3NF)撤防、巴斯-科德范式(BCNF)虽风、第四范式(4NF)和第五范式(5NF,又稱完美范式)寄月。

* 分類:

1. 第一范式(1NF):每一列都是不可分割的原子數(shù)據(jù)項(xiàng)

2. 第二范式(2NF):在1NF的基礎(chǔ)上辜膝,非碼屬性必須完全依賴于碼(在1NF基礎(chǔ)上消除非主屬性對主碼的部分函數(shù)依賴)

* 幾個(gè)概念:

1. 函數(shù)依賴:A-->B,如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值漾肮。則稱B依賴于A

例如:學(xué)號-->姓名厂抖。? (學(xué)號,課程名稱) --> 分?jǐn)?shù)

2. 完全函數(shù)依賴:A-->B克懊, 如果A是一個(gè)屬性組忱辅,則B屬性值得確定需要依賴于A屬性組中所有的屬性值。

例如:(學(xué)號谭溉,課程名稱) --> 分?jǐn)?shù)

3. 部分函數(shù)依賴:A-->B墙懂, 如果A是一個(gè)屬性組,則B屬性值得確定只需要依賴于A屬性組中某一些值即可扮念。

例如:(學(xué)號垒在,課程名稱) -- > 姓名

4. 傳遞函數(shù)依賴:A-->B, B -- >C . 如果通過A屬性(屬性組)的值,可以確定唯一B屬性的值扔亥,在通過B屬性(屬性組)的值可以確定唯一C屬性的值场躯,則稱 C 傳遞函數(shù)依賴于A

例如:學(xué)號-->系名,系名-->系主任

5. 碼:如果在一張表中旅挤,一個(gè)屬性或?qū)傩越M踢关,被其他所有屬性所完全依賴,則稱這個(gè)屬性(屬性組)為該表的碼

例如:該表中碼為:(學(xué)號粘茄,課程名稱)

* 主屬性:碼屬性組中的所有屬性

* 非主屬性:除過碼屬性組的屬性

3. 第三范式(3NF):在2NF基礎(chǔ)上签舞,任何非主屬性不依賴于其它非主屬性(在2NF基礎(chǔ)上消除傳遞依賴)

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

1. 命令行:

* 語法:

* 備份: mysqldump -u用戶名 -p密碼 數(shù)據(jù)庫名稱 > 保存的路徑

* 還原:

1. 登錄數(shù)據(jù)庫

2. 創(chuàng)建數(shù)據(jù)庫

3. 使用數(shù)據(jù)庫

4. 執(zhí)行文件秕脓。source 文件路徑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市儒搭,隨后出現(xiàn)的幾起案子吠架,更是在濱河造成了極大的恐慌,老刑警劉巖搂鲫,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傍药,死亡現(xiàn)場離奇詭異,居然都是意外死亡魂仍,警方通過查閱死者的電腦和手機(jī)拐辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來擦酌,“玉大人俱诸,你說我怎么就攤上這事∩薏埃” “怎么了睁搭?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笼平。 經(jīng)常有香客問我园骆,道長,這世上最難降的妖魔是什么出吹? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任遇伞,我火速辦了婚禮,結(jié)果婚禮上捶牢,老公的妹妹穿的比我還像新娘鸠珠。我一直安慰自己,他們只是感情好秋麸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布渐排。 她就那樣靜靜地躺著,像睡著了一般灸蟆。 火紅的嫁衣襯著肌膚如雪驯耻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天炒考,我揣著相機(jī)與錄音可缚,去河邊找鬼。 笑死斋枢,一個(gè)胖子當(dāng)著我的面吹牛帘靡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓤帚,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼描姚,長吁一口氣:“原來是場噩夢啊……” “哼涩赢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轩勘,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤筒扒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绊寻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體花墩,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年榛斯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了观游。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搂捧。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驮俗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出允跑,到底是詐尸還是另有隱情王凑,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布聋丝,位于F島的核電站索烹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弱睦。R本人自食惡果不足惜百姓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望况木。 院中可真熱鬧垒拢,春花似錦、人聲如沸火惊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屹耐。三九已至尸疆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惶岭,已是汗流浹背寿弱。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留按灶,地道東北人症革。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像兆衅,于是被迫代替她去往敵國和親地沮。 傳聞我的和親對象是個(gè)殘疾皇子嗜浮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354

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

  • 接下來的一些內(nèi)容,我們需要提前學(xué)一些簡單的sql語句摩疑,方便大家理解接下來的知識危融。 DDL—數(shù)據(jù)定義語言(Creat...
    不排版閱讀 418評論 0 1
  • 花了3天時(shí)間學(xué)習(xí)MySql,考了個(gè)二級MySql 書籍參考:高等教育出版社《全國計(jì)算機(jī)等級考試二級教程-MySQL...
    如果仲有聽日閱讀 1,277評論 4 4
  • 概念: 為了保證數(shù)據(jù)的完整性和一致性雷袋,MySQL提供了約束這個(gè)屬性吉殃。約束分為表級約束和列級約束,如果約束只是針對某...
    指間Hrc閱讀 669評論 0 2
  • 一楷怒、MySQL優(yōu)化 MySQL優(yōu)化從哪些方面入手: (1)存儲層(數(shù)據(jù)) 構(gòu)建良好的數(shù)據(jù)結(jié)構(gòu)蛋勺。可以大大的提升我們S...
    寵辱不驚丶?xì)q月靜好閱讀 2,427評論 1 8
  • 隨著時(shí)間的推移,那些汗水刃泡,油脂在吉他上慢慢堆積起來巧娱,并且慢慢腐蝕它。這會使你吉他的音色變得越來越模糊烘贴,并且會逐漸變...
    吉他范兒閱讀 2,022評論 0 0