MySQL 學(xué)習(xí)筆記

MySQL 學(xué)習(xí)筆記

1 定義

數(shù)據(jù)庫中的表:一行叫一條記錄藻雌。每一列叫一個屬性雌续,或一個字段。
主鍵:表中的某個特殊字段胯杭,具有唯一的確定的值驯杜,可以根據(jù)該字段唯一的確定一條記錄
外鍵:表中的某個字段的值為另一張表(也可以是自身)中的某個字段的值。

2 MySQL 的數(shù)據(jù)類型

2.1 數(shù)值

  1. TINYINT 小整型
  2. INT/INTEGER 整型
  3. BIGINT 長整型
  4. FLOAT 小數(shù)
  5. DOUBLIE 雙精度小數(shù)

2.2 日期

  1. DATE YYYY-MM-DD
  2. TIME HH:MM:SS
  3. YEAT YYYY
  4. DATETIME 混合
  5. TIMESTAMP 高精度

2.3 字符串

  1. CHAR 定長字符串
  2. VARCHAR 不定長
  3. BLOB 二進(jìn)制文件
  4. LONGBLOB 長二進(jìn)制文件
  5. TEXT 長文本數(shù)據(jù)
  6. LONGTEXT 長文本數(shù)據(jù)
    注:以上僅總結(jié)了常用類型做个,并不是所有類型

3 SQL語句

3.1 數(shù)據(jù)庫的創(chuàng)建

CREATE DATABASE 數(shù)據(jù)庫名 [參數(shù)]

例如創(chuàng)建一個名為test的數(shù)據(jù)庫鸽心,設(shè)置字符集為utf-8

CREATE DATABASE test CHARACTER SET utf8;

出現(xiàn)下面的內(nèi)容即說明創(chuàng)建成功。

Query OK, 0 rows affected (0.00 sec)

你可以使用下面的語句查看新創(chuàng)建的數(shù)據(jù)庫

SHOW DATABASES;

選擇需要操作的數(shù)據(jù)庫

USE test;

執(zhí)行完上面的語句后出現(xiàn)Database changed居暖,
你所有的操作都將在test數(shù)據(jù)庫中進(jìn)行顽频。

3.2 創(chuàng)建表

CREATE TABLE 表名 (
    列名 列數(shù)據(jù)屬性 [約束],
    列名 列數(shù)據(jù)屬性太闺,
    ... ...
);

例如創(chuàng)建一個users表id是主鍵糯景,自增長。
PRIMARY KEY:約束 主鍵約束
AUTO_INCREMENT:約束 自增長

CREATE TABLE users(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
account VARCHAR(50),
pwd VARCHAR(50),
);

3.3 插入數(shù)據(jù)

INSERT INTO 表名 VALUES (值1, 值2,...,NULL省骂,...);

這種插入方式一定要將所有的值都寫上蟀淮,如果為空的話寫NULL。值與列要一一對應(yīng)
主鍵如果設(shè)置為自增的話寫NULL

也可以指定所要插入數(shù)據(jù)的列冀宴,向下面這樣灭贷。

INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....);

按回車后出現(xiàn)

Query Ok, 1 row affected (0.05 sec) 

說明成功。否則請檢查SQL語句略贮。

例如向剛剛創(chuàng)建的users表中插入一條數(shù)據(jù)

INSERT INTO users VALUES(NULL,'admin','admin');

第一列是id甚疟,主鍵自增,不需要插入逃延。

3.4 查詢數(shù)據(jù)

SELECT * FROM 表名 [WHERE 條件]  [參數(shù)];

例如查詢users表里的所有數(shù)據(jù)的 account 列览妖。

SELECT account FROM users;

3.4.1 WHERE 查詢

可以給FROM后面的表起一個別名。例如:

SELECT tn.id,tn.account FROM tablename AS tn
WHERE tn.id = 1;

3.4.2 WHERE 后的條件語句

WHERE后面可以寫多種條件語句揽祥。
1. 關(guān)系語句: =,>,<,!=,>=,<=
2. 邏輯語句: AND,OR,NOT
3. IS NULL: 是否為空
4. BETWEEN:在兩者之間 
    WHERE u.id BETWEEN 11 AND 15;
    id 在11-15之間讽膏。
5. IN:在..之中
    WHERE u.account IN (值1,值2,...);
    查詢 account 在(值1,值2,...)之中的數(shù)據(jù)
5. LIKE:模糊匹配 
    WHERE  u.id LIKE '通配符';
    
    通配符
    '%':替代零個或多個字符
    '_':替代一個字符
        WHERE u.account LIKE '%A%';查詢account字段中含有'A'的數(shù)據(jù)。

    [charlist]:字符列中的任何單一字符 
        WHERE u.account LIKE '[ASD]%'; 查詢以A S D 開頭的數(shù)據(jù)拄丰。
    [!charlist]:不在字符列中的任何單一字符
        WHERE u.account LIKE '[!ASD]%'; 查詢不以A S D 開頭的數(shù)據(jù) 

3.4.3 聚合函數(shù)

SELECT AVG(列名) FROM 表名
1. AVG(列名):返回某一列的平均值
2. COUNT(列名):返回匹配指定條件的行數(shù)
3. FIRST(列名):返回指定的字段中第一個記錄的值府树。
4. LAST(列名):返回指定的字段中最后一個記錄的值。
5. MAX(列名):返回一列中的最大值料按。NULL 值不包括在計算中奄侠。 
6. MIN(列名):返回一列中的最小值。NULL 值不包括在計算中载矿。
7. SUM(列名):返回數(shù)值列的總數(shù)(總額)垄潮。
8. UCASE(列名):把字段的值轉(zhuǎn)換為大寫。
9. LCASE(列名):把字段的值轉(zhuǎn)換為小寫。 
10. MID(列名,開始位置弯洗,截取長度):用于從文本字段中提取字符旅急。
SELECT MID(account,1,3) as uname FROM users;
11. LEN(列名):返回文本字段中值的長度。
12. ROUND(列名,小數(shù)位數(shù)):用于把數(shù)值字段舍入為指定的小數(shù)位數(shù)牡整。
13. CURDATE():返回當(dāng)前日期藐吮。YYYY-MM-DD。
14. CURTIME():返回當(dāng)前時間果正。HH:MM:SS炎码。
15. NOW():返回當(dāng)前時間。YYYY-MM-DD HH:MM:SS秋泳。
16. YEAR(d),MONTH(d),DAY(d):分別返回參數(shù)的年攒菠,月迫皱,日。
17. ADDDATE(d,n):在d的時間上加n天辖众。
18. SUBDATE(d,n):在d的時間上減n天卓起。
19. DATE_FORMAT(d,f):格式化時間d。
%a 縮寫星期名
%b 縮寫月名
%c 月凹炸,數(shù)值
%D 帶有英文前綴的月中的天
%d 月的天戏阅,數(shù)值(00-31)
%e 月的天,數(shù)值(0-31)
%f 微秒
%H 小時 (00-23)
%h 小時 (01-12)
%I(大寫的i) 小時 (01-12)
%i 分鐘啤它,數(shù)值(00-59)
%j 年的天 (001-366)
%k 小時 (0-23)
%l(小寫的L) 小時 (1-12)
%M 月名
%m 月奕筐,數(shù)值(00-12)
%p AM 或 PM
%r 時間,12-小時(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 時間, 24-小時 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天变骡,與 %X 使用
%v 周 (01-53) 星期一是一周的第一天离赫,與 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天塌碌,4 位渊胸,與 %V 使用
%x 年,其中的星期一是周的第一天台妆,4 位翎猛,與 %v 使用
%Y 年,4 位
%y 年接剩,2 位

3.4.4 分組查詢

GROUP BY 語句用于結(jié)合聚合函數(shù)切厘,根據(jù)一個或多個列對結(jié)果集進(jìn)行分組。

SELECT 列名, 聚合函數(shù)
FROM 表名
WHERE 條件
GROUP BY 列名

例如根據(jù)用戶表中的role屬性分組統(tǒng)計每組的人數(shù)

SELECT role, COUNT(id)
FROM users
GROUP BY role;

3.4.5 分組過濾

在 SQL 中增加 HAVING 子句原因是搂漠,WHERE 關(guān)鍵字無法與合計函數(shù)一起使用迂卢。
例如根據(jù)用戶表中的role屬性分組統(tǒng)計每組的人數(shù),查找人數(shù)大于10的role

SELECT role, COUNT(id)
FROM users
GROUP BY role
HAVING COUNT(id)>10;

3.4.6 結(jié)果排序

ORDER BY 語句用于根據(jù)指定的列對結(jié)果集進(jìn)行排序。
默認(rèn)為升序而克,降序使用關(guān)鍵字DESC靶壮。
例如根據(jù)用戶表中的role屬性分組統(tǒng)計每組的人數(shù),按照人數(shù)降序排列

SELECT role, COUNT(id) count
FROM users
GROUP BY role
ORDER BY count DESC;

3.5 更新數(shù)據(jù)

UPDATE 表名 SET 列名 = 新值 WHERE 條件

WHERE的修改條件是可選的员萍,不寫的話修改表的所有數(shù)據(jù)

例如修改users表里的數(shù)據(jù)腾降,將admin用戶的密碼改為root

UPDATE users SET pwd = 'root' WHERE account = 'admin';

3.6 刪除數(shù)據(jù)

DELETE FROM 表名 WHERE 條件

WHERE的修改條件是可選的,不寫的話刪除表的所有數(shù)據(jù)

4 表屬性的修改

4.1 表重命名

ALTER TABLE 表名 RENAME 新表名;

4.2 添加新的一列

ALTER TABLE 表名 ADD 列名 列數(shù)據(jù)類型 [AFTER 插入位置]

例如在users表的pwd字段后面添加一個role字段類型是INTEGER

ALTER TABLE users ADD role INTEGER AFTER pwd;

4.3 修改列

ALTER TABLE 表名 CHANGE 列名稱 新列名稱 新數(shù)據(jù)類型;

例如修改users表里的pwd字段改為password碎绎,類型是varchar(20)

ALTER TABLE users CHANGE pwd password varchar(20);

5 完整性約束

約束:對表中的列添加的一些限制條件螃壤。只有滿足這些條件時才能數(shù)據(jù)才能插入。

5.1 實體完整性

主鍵不能為空

5.2 參照完整性

外鍵的值必須是某張表中存在的值筋帖,可以為空

5.3 用戶自定義完整性

唯一性約束奸晴,某一列雖然不為主鍵,但是依然不能重復(fù)日麸。

5.4 添加約束

ALTER TABLE 表名
    ADD CONSTRAINT 約束名 約束類型(列名);

例如寄啼,給users表的role列添加外鍵約束,引用自roles表的id列

ALTER TABLE users
    ADD CONSTRAINT uq_phone FOREIGN KEY (`role`) 
    REFERENCES `roles` (`id`);

5.5 常見約束類型

1. PRIMARY KEY: 主鍵 
2. CHECK:限制列中的值的范圍代箭。MySQL好像不支持
3. UNIQUE:唯一性約束
4. NOT NULL:非空約束
5. FOREIGN KEY:外鍵約束

6 范式

函數(shù)依賴:如果A依賴B墩划,那么當(dāng)確定A值后,B值也就確定了嗡综。
例如乙帮,在一張表中由于主鍵是唯一確定且不重復(fù)的。所以极景,當(dāng)主鍵的值確定了察净,那么其他列的值也就確定了。我們便說戴陡,其他列都依賴主鍵塞绿。

完全函數(shù)依賴:如果B函數(shù)依賴于A,并且對于A的任何一個真子集A1,都有 B不依賴與A1,稱A對B完全函數(shù)依賴恤批。

部分函數(shù)依賴:如果B函數(shù)依賴于A异吻,但是B不完全函數(shù)依賴于A,稱B對A部分函數(shù)依賴喜庞。
例如诀浪,在一張表中,有兩列延都,一列是用戶名雷猪,而另一列里某些行里記錄的是用戶的id,而某些行里在這一列里記錄的是用戶所在部門的id晰房,那么用戶名列便部分函數(shù)依賴于id列求摇,因為存在某些行依賴于id列的子集(記錄是部門id的行)射沟。

傳遞函數(shù)依賴:如果A函數(shù)依賴于B,B函數(shù)依賴于C与境,則稱A傳遞函數(shù)依賴于C验夯。

6.1 1NF(第一范式)

確保列不可分,即每一列只描述一個屬性摔刁,即達(dá)到1NF

6.2 2NF(第二范式)

在1NF的基礎(chǔ)上消除部分函數(shù)依賴即達(dá)到2NF挥转。即每一個非主屬性(非主鍵列)完全函數(shù)依賴于主鍵。
例如共屈,可以將上面部分函數(shù)依賴的例子中的表绑谣,改成兩張表,一張用戶表拗引,一張部門表借宵,所有的用戶名列都完全依賴于主鍵。便達(dá)到2NF寺擂。

6.3 3NF(第三范式)

在2NF的基礎(chǔ)上消除傳遞函數(shù)依賴便達(dá)到3NF暇务。即每一個非主屬性(非主鍵列)即不部分依賴于主鍵,也不傳遞依賴于主鍵怔软。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市择镇,隨后出現(xiàn)的幾起案子挡逼,更是在濱河造成了極大的恐慌,老刑警劉巖腻豌,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件家坎,死亡現(xiàn)場離奇詭異,居然都是意外死亡吝梅,警方通過查閱死者的電腦和手機虱疏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苏携,“玉大人做瞪,你說我怎么就攤上這事∮叶常” “怎么了装蓬?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纱扭。 經(jīng)常有香客問我牍帚,道長,這世上最難降的妖魔是什么乳蛾? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任暗赶,我火速辦了婚禮鄙币,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹂随。我一直安慰自己十嘿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布糙及。 她就那樣靜靜地躺著详幽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浸锨。 梳的紋絲不亂的頭發(fā)上唇聘,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音柱搜,去河邊找鬼迟郎。 笑死,一個胖子當(dāng)著我的面吹牛聪蘸,可吹牛的內(nèi)容都是我干的宪肖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼健爬,長吁一口氣:“原來是場噩夢啊……” “哼控乾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娜遵,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蜕衡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后设拟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慨仿,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年纳胧,在試婚紗的時候發(fā)現(xiàn)自己被綠了镰吆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡跑慕,死狀恐怖万皿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情相赁,我是刑警寧澤相寇,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站钮科,受9級特大地震影響唤衫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绵脯,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一佳励、第九天 我趴在偏房一處隱蔽的房頂上張望休里。 院中可真熱鬧,春花似錦赃承、人聲如沸妙黍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拭嫁。三九已至,卻和暖如春抓于,著一層夾襖步出監(jiān)牢的瞬間做粤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工捉撮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕品,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓巾遭,卻偏偏與公主長得像肉康,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灼舍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 目錄 MySQL簡介 基本輸入查詢 創(chuàng)建并使用數(shù)據(jù)庫 SELECT語句 選擇特殊行 條件 通配符 選擇特殊列 排序...
    鬼宇書生閱讀 1,030評論 2 1
  • 數(shù)據(jù)庫操作(DDL) 數(shù)據(jù)庫的創(chuàng)建 例如: 查看當(dāng)前服務(wù)器下的數(shù)據(jù)庫列表 查看數(shù)據(jù)庫的定義 查看上一步操作的警告信...
    Cheng0917閱讀 551評論 0 0
  • 參考資料 慕課網(wǎng)——與MySQL的零距離接觸 前言 本人菜鳥吼和,入IT只為當(dāng)鼓勵師。本編文章主要對 MySQL的一些...
    BeYanJin閱讀 313評論 0 2
  • MySQL學(xué)習(xí)筆記---基礎(chǔ)概念和一些基礎(chǔ)SQL語句(一) 作者:zhangjunqiang MySQL學(xué)習(xí)筆記骑素,...
    Omit03閱讀 680評論 1 3
  • 時間是上蒼賜給我們最好的禮物纹安,我們每個人對待這份禮物的態(tài)度不盡相同。 有的人認(rèn)為時間是我們的奴隸砂豌,它是可以管理的,...
    漁洋芳子閱讀 172評論 0 0