前言
這里筑夢(mèng)師,是一名正在努力學(xué)習(xí)的iOS開(kāi)發(fā)工程師,目前致力于全棧方向的學(xué)習(xí),希望可以和大家一起交流技術(shù),共同進(jìn)步,用簡(jiǎn)書(shū)記錄下自己的學(xué)習(xí)歷程.
本文閱讀建議
1.一定要辯證的看待本文.
2.本文并不會(huì)涉及到MySQL詳細(xì)知識(shí)點(diǎn),只陳述在學(xué)習(xí)MySQL過(guò)程中遇到的關(guān)鍵點(diǎn).
3.MySQL依照其開(kāi)發(fā)應(yīng)用分為'基礎(chǔ)篇,高級(jí)篇,實(shí)際應(yīng)用',根據(jù)本人學(xué)習(xí)進(jìn)度更新.
4.本文只闡述學(xué)習(xí)路線和學(xué)習(xí)當(dāng)中的重點(diǎn)問(wèn)題.需要讀者自己使用百度進(jìn)行拓展學(xué)習(xí).
5.本文所表達(dá)觀點(diǎn)并不是最終觀點(diǎn),還會(huì)更新,因?yàn)楸救诉€在學(xué)習(xí)過(guò)程中,有什么遺漏或錯(cuò)誤還望各位指出.
6.覺(jué)得哪里不妥請(qǐng)?jiān)谠u(píng)論留下建議~
7.覺(jué)得還行的話就點(diǎn)個(gè)小心心鼓勵(lì)下我吧~
目錄
1.數(shù)據(jù)庫(kù)介紹及概念
2.數(shù)據(jù)庫(kù)存儲(chǔ)引擎和數(shù)據(jù)類型
3.結(jié)構(gòu)化查詢語(yǔ)言SQL
3.數(shù)據(jù)庫(kù)基本操作
4.數(shù)據(jù)表基本操作
5.數(shù)據(jù)基本操作
6.數(shù)據(jù)庫(kù)聚合函數(shù)
7.數(shù)據(jù)庫(kù)邏輯運(yùn)算符&比較運(yùn)算符
8.數(shù)據(jù)庫(kù)聯(lián)結(jié)查詢
9.數(shù)據(jù)庫(kù)聯(lián)結(jié)查詢思想
10.數(shù)據(jù)庫(kù)范式建表思想
推薦書(shū)籍 & 網(wǎng)站推薦
MySQL5.7官方手冊(cè)
關(guān)系庫(kù)三大范式
圖解SQL的JoinHead First SQL:本書(shū)全部案例以MySQL作為素材,詳細(xì)介紹了SQL的各種語(yǔ)句使用
Head First PHP & MySQL:這本書(shū)從第一章就開(kāi)始講PHP如何操縱MySQL,根據(jù)書(shū)中真是案例一步步帶入PHP和MySQL的聚合函數(shù)凰萨、PHP的內(nèi)置函數(shù)以及如何聯(lián)合進(jìn)行調(diào)試
PHP+MySQL開(kāi)發(fā)實(shí)戰(zhàn):本書(shū)針對(duì)方向?yàn)閷?shí)操,里面詳細(xì)講述了每個(gè)SQL語(yǔ)句如何使用,使用所需要的參數(shù)規(guī)范等.每個(gè)章節(jié)后都有項(xiàng)目可以進(jìn)行練習(xí),物流系統(tǒng)和論壇等.這本書(shū)可以當(dāng)做工具書(shū)(推薦入手,方便查詢).
PHP和MySQL Web開(kāi)發(fā)(第五版):目前實(shí)體書(shū)為第五版,電子書(shū)為第四版,第五版多了PHP7.0的講解,本書(shū)注重方向?yàn)楦拍?結(jié)合上一本實(shí)操書(shū)便可以靈活運(yùn)用PHP和MySQL進(jìn)行項(xiàng)目開(kāi)發(fā).
PHP、MySQL與JavaScript學(xué)習(xí)手冊(cè)第4版:實(shí)體書(shū)有最新版,本書(shū)詳細(xì)闡述了一個(gè)網(wǎng)絡(luò)項(xiàng)目中所擔(dān)當(dāng)?shù)乃薪巧?包括Ajax和jQuery都有提到),適合在學(xué)習(xí)完P(guān)HP&MySQL后進(jìn)行學(xué)習(xí).
數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)霹崎、實(shí)現(xiàn)與管理原書(shū)第8版:本書(shū)為拓展書(shū),如果你想詳細(xì)了解數(shù)據(jù)庫(kù)的起源,原理,以及對(duì)1NF尾菇、2NF派诬、BCNF链沼、3NF等的定義,創(chuàng)建更為成熟的數(shù)據(jù)庫(kù).這是一本原理書(shū).
本來(lái)這篇文章,在我學(xué)習(xí)了數(shù)據(jù)庫(kù)的增刪改查操作以后,我就想寫(xiě)出來(lái),結(jié)果經(jīng)過(guò)6本書(shū)的研讀,才發(fā)現(xiàn),自己所謂的增刪改查,只是MySQL的冰山一角.
本人強(qiáng)烈建議在進(jìn)行視頻學(xué)習(xí)之前,首先看一下Head First系列對(duì)SQL的講述,因?yàn)橛行┮曨l的講述順序并不適合入門(mén).并且要結(jié)合PHP一起進(jìn)行學(xué)習(xí)(或者可以學(xué)習(xí)Java).
數(shù)據(jù)庫(kù)介紹及概念
數(shù)據(jù)庫(kù)服務(wù)器
安裝了數(shù)據(jù)庫(kù)軟件的計(jì)算機(jī),就是數(shù)據(jù)庫(kù)服務(wù)器.
數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)
DBMS缆八,Database management System數(shù)據(jù)庫(kù)庫(kù)管理系統(tǒng)疾捍,是一款操作數(shù)據(jù)庫(kù)的管理軟件拾氓。
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)(Database)是用來(lái)組織咙鞍、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)续滋。簡(jiǎn)單來(lái)說(shuō)是可視為電子化的文件柜——存儲(chǔ)電子文件的處所,相當(dāng)于文件夾疲酌。
數(shù)據(jù)表
數(shù)據(jù)表是存放數(shù)據(jù)的地方蜡峰。
記錄、字段(列)朗恳、數(shù)據(jù)(值)
記錄:一行數(shù)據(jù)就是一條記錄湿颅;
字段(列):每個(gè)表由多個(gè)列構(gòu)成,每個(gè)列就是一個(gè)字段粥诫。
數(shù)據(jù):行列交叉處的值油航,就是數(shù)據(jù)。
數(shù)據(jù)庫(kù)訪問(wèn)流程圖
很多牌子的數(shù)據(jù)庫(kù)(Oracle谊囚、DB2怕享、SQL Server、MySQL等)->選擇安裝MySQL->數(shù)據(jù)庫(kù)Database->數(shù)據(jù)表TABLE->數(shù)據(jù)DATA
關(guān)系型數(shù)據(jù)庫(kù)
所謂關(guān)系數(shù)據(jù)庫(kù)镰踏,是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù)函筋,現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均可用關(guān)系模型來(lái)表示。例如:教師實(shí)體奠伪、學(xué)生實(shí)體等驻呐;
目前主流的關(guān)系數(shù)據(jù)庫(kù)有Oracle、MySQL芳来、DB2含末、SQLServer、sybase等即舌;
簡(jiǎn)單說(shuō)佣盒,關(guān)系型數(shù)據(jù)庫(kù)是由多張能互相聯(lián)接的二維行列表格組成的數(shù)據(jù)庫(kù);
通俗說(shuō)顽聂,一個(gè)關(guān)系模型其實(shí)就是一張規(guī)范的二維表格肥惭。
結(jié)構(gòu)化查詢語(yǔ)言SQL
結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)簡(jiǎn)稱SQL,是關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言紊搪,用于對(duì)數(shù)據(jù)的存取和管理蜜葱;同時(shí)也是數(shù)據(jù)庫(kù)腳本文件的擴(kuò)展名(.sql),備份文件的擴(kuò)展名耀石。
SQL語(yǔ)言簡(jiǎn)潔牵囤,易學(xué)易用。下面會(huì)詳細(xì)講到.
數(shù)據(jù)庫(kù)存儲(chǔ)引擎和數(shù)據(jù)類型
什么是存儲(chǔ)引擎
- 數(shù)據(jù)使用各種不同的技術(shù) 存儲(chǔ)在數(shù)據(jù)庫(kù)中
- 這些文件引用不同的存儲(chǔ)機(jī)制,索引技巧,鎖定水平,形成不同的最終的廣泛功能
- 也稱作表類型.
- MySQL內(nèi)置了不同的很多存儲(chǔ)引擎,目前流行的是InnoDB
查看存儲(chǔ)引擎
- SHOW ENGINES 查看所支持的引擎
InnoDB存儲(chǔ)引擎
- 其優(yōu)點(diǎn)是 事務(wù)處理 回滾 崩潰修復(fù)能力 處理多并發(fā)
- 第一個(gè)提供外鍵約束的存儲(chǔ)引擎
- 缺點(diǎn)是讀寫(xiě)效率差,占用數(shù)據(jù)空間較大
MyISAM存儲(chǔ)引擎
- 基于ISAM引擎
- 存儲(chǔ)格式為靜態(tài) 動(dòng)態(tài) 壓縮.
- 靜態(tài)數(shù)據(jù) 空間會(huì)占用較大空間,但處理數(shù)據(jù)會(huì)降至最低開(kāi)銷.
- 動(dòng)態(tài)數(shù)據(jù) 空間占用較小,但數(shù)據(jù)變動(dòng)會(huì)導(dǎo)致內(nèi)存移動(dòng),產(chǎn)生碎片(需要調(diào)用 碎片整理語(yǔ)句 OPTIMIZE TABLE)
- 只讀數(shù)據(jù) 采取壓縮空間存儲(chǔ)
- 整體優(yōu)勢(shì)占用空間較小,處理速度快不支持 事務(wù)和并發(fā)性處理
MEMORY存儲(chǔ)引擎
- 索引類型
- 哈希索引
- 存儲(chǔ)周期
- 大小受限
- 生命周期短
數(shù)據(jù)類型
- 數(shù)據(jù)類型
- 數(shù)字類型
- TINYINT 最小整數(shù) (127~255)
- BIT 最小整數(shù) (127~255)
- BOOL 最小整數(shù) (127~255)
- SMALLINT 小型整數(shù) 32767
- MEDIUMINT 中型整數(shù) 8388607
- INT 標(biāo)準(zhǔn)整數(shù) 2147683647
- BIGINT 大整數(shù) 9223372036854775807
- FLOAT 單精度浮點(diǎn)數(shù)
- DOUBLE 雙精度浮點(diǎn)數(shù)
- DECIMAL 一般整數(shù) 自定義長(zhǎng)度
- 字符串類型
- 普通字符串類型
- CHAR 0-255
- VARCHAR 0-255
- TEXT 和 BLOB類型
- TINYBLOB 225字節(jié) 小BLOB字段
- TINYTEXT 225字節(jié) 小TEXT字段
- BLOB 65535字節(jié) 常規(guī)BLOB字段
- TEXT 65535字節(jié) 常規(guī)TEXT字段
- MEDIUMBLOB 16777215字節(jié) 中型BLOB字段
- MEDIUMTEXT 16777215字節(jié) 中型TEXT字段
- LONGBLOB 4294967295字節(jié) 長(zhǎng)BLOB字段
- LONGTEXT 4294967295 長(zhǎng)TEXT字段
- 特殊類型SET 和ENUM
- ENUM 65535
- SET 64
- 普通字符串類型
- 日期類型
- DATE
- TIME
- DATETIME
- TIMESTAMP
- YEAR
- 數(shù)據(jù)類型抉擇
- 選擇最小的可用類型,如果值永遠(yuǎn)不超過(guò)127,則使用TINYINT比INT強(qiáng)
- 對(duì)于完全是數(shù)字的,可用整數(shù)類型
- 浮點(diǎn)類型用于可能具有小數(shù)部分的數(shù).
- 從速度方面考慮,要選擇固定的列,可以使用CHAR 類型
- 要節(jié)省空間,使用動(dòng)態(tài)的列,可以使用VARCHER類型
- 要將列中的內(nèi)容限制在一種選擇,可以使用ENUM類型.
- 允許在一個(gè)列中有多于一個(gè)的條目,可以使用SET類型
- 如果要搜索的內(nèi)容不區(qū)分大小寫(xiě),可使用TEXT類型
- 如果要搜索的內(nèi)容區(qū)分大小寫(xiě),可以使用BLOB類型
- 數(shù)字類型
結(jié)構(gòu)化查詢語(yǔ)言SQL
SQL語(yǔ)句自有規(guī)范,其大致語(yǔ)法可以概括為:增滞伟、刪揭鳞、改、查.
數(shù)據(jù)庫(kù)基本操作
數(shù)據(jù)庫(kù)服務(wù)器啟動(dòng)梆奈、停止
Mac環(huán)境下:
確認(rèn)已經(jīng)使用brew 安裝MySQL
運(yùn)行指令> mysql.server start 啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器
運(yùn)行指令> mysql.server stop 停止數(shù)據(jù)庫(kù)服務(wù)器
數(shù)據(jù)庫(kù)登錄野崇、退出
終端運(yùn)行指令> mysql -u root -p回車
數(shù)據(jù)庫(kù)的增刪改查
- 創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE name
- 查看數(shù)據(jù)庫(kù) SHOW
- 查看所有數(shù)據(jù)庫(kù) SHOW DATABASES
- 使用數(shù)據(jù)庫(kù) USE DATABASE name
- 刪除數(shù)據(jù)庫(kù) DROP DATABASE name
數(shù)據(jù)表基本操作
- 添加數(shù)據(jù)表 CREATE
- 查看表結(jié)構(gòu) SHOW COLUMNS/DESCRIBE
- 查看表詳細(xì)結(jié)構(gòu)語(yǔ)句 SHOW CREATE TABLE
- 修改表結(jié)構(gòu) ALTER TABLE
- 重命名 RENAME TABLE
- 刪除表 DROP TABLE
數(shù)據(jù)基本操作
- 插入數(shù)據(jù) INSERT
- 查詢數(shù)據(jù) SELECT
- 修改數(shù)據(jù) UPDATE
- 刪除數(shù)據(jù) DELETE
數(shù)據(jù)庫(kù)聚合函數(shù)
- COUNT(字段名) 計(jì)算非空記錄數(shù)
- SELECT COUNT(DISTINCT results) FROM student;
- COUNT(*)全部統(tǒng)計(jì)
- SELECT sex,count(sex) AS 人數(shù) FROM student GROUP BY sex DESC.
- AVG(字段名) 平均數(shù)
- SELECT AVG(row) FROM table_name;
- MIN (字段名) 最小值
- SELECT MIN(row) FROM table_name;
- MAX (字段名) 最大值
- SELECT MAX(row) FROM table_name;
- STD(字段名)指定字段標(biāo)準(zhǔn)背離值
- STDTEV(字段名)指定字段標(biāo)準(zhǔn)背離值
- SUM(字段名)指定字段所有記錄的總合
- SELECT sum(row) FROM table_name;
數(shù)據(jù)庫(kù)邏輯運(yùn)算符&比較運(yùn)算符
- 算數(shù)運(yùn)算符
- 加法運(yùn)算+
- 減法運(yùn)算-
- 乘法運(yùn)算 *
- 除法運(yùn)算 /
- 求余運(yùn)算 %
- 除法運(yùn)算 返回商 DIV 同’/’
- 求余運(yùn)算 返回余數(shù) MOD 同’%’
- 比較運(yùn)算符
- 等于 =
- 大于 >
- 小于 <
- 大于等于 =>
- 小于等于 <=
- 不等于 != 或 <>
- 是否為空 IS NULL
- 不為空 IS NOT NULL
- 范圍 ..介于 BETWEEN AND
- 范圍 ..不在 NOT BETWEEN AND
- 在范圍之內(nèi) IN
- 不在什么范圍之內(nèi) NOT IN
- 模糊查詢 包含 LIKE
- 模糊查詢 不包含 NOT LIKE
- 正則表達(dá)式 REGEXP
- 邏輯運(yùn)算符
- 多條件查詢 AND
- 條件必須全部滿足,才能被查詢出來(lái)
- SELECT * FROM table_name WHERE condition_1 AND condition_2 …可以無(wú)限AND疊加
- SELECT * FROM table_name WHERE user=‘mr’ AND section=‘php’.
- 多條件查詢 OR
- 滿足其中一個(gè)條件就會(huì)被查出來(lái)
- SELECT * FROM table_name WHERE condition_1 OR condition_2…OR無(wú)限疊加
- SELECT * FROM table_name WHERE section=‘php’ OR section=‘程序開(kāi)發(fā)’;
- 非運(yùn)算 NOT
- 異或運(yùn)算 XOR
- 多條件查詢 AND
- 位運(yùn)算
- 按位與&
- 按位或|
- 按位取反~
- 按位異或^
- 按位左移<<
- 按位右移>>
數(shù)據(jù)庫(kù)聯(lián)結(jié)查詢
- 內(nèi)連接查詢
- SELECT name,books FROM table_name_1,table_name_2 WHERE table_name1.user =table_name2.user
- 內(nèi)連接,結(jié)果集只包含參加連接的表中與指定字段相符的行.
- 如果沒(méi)有WHERE限定,則為交叉連接或者全連接
- 相等聯(lián)結(jié)
SELECT col_name FROM table_name INNER JOIN table_name WHERE conditions = conditions - 不等聯(lián)結(jié)
SELECT col_name FROM table_name INNER JOIN table_name WHERE conditions <> conditions - 自然聯(lián)結(jié)
SELECT col_name FROM table_name NATURAL JOIN table_name ;
- 左外連接
- SELECT col_name FROM table_name1 LEFT JOIN table_name2 ON table_name1.col_name =table_name2.col_name;
- 左外鏈接,是指將左表中的所有數(shù)據(jù)分別與右表的每條數(shù)據(jù)進(jìn)行結(jié)合,返回的結(jié)果除內(nèi)連接的數(shù)據(jù)外,還包括左表中不符合條件的數(shù)據(jù),并在右表的相應(yīng)列中添加NULL值.
- 右外連接
- SELECT col_name FROM table_name1 RIGHT JOIN table_name2 ON table_name1.col_name =table_name2.col_name;
- 右外連接,是指將右表中的所有數(shù)據(jù)分別與左表中的每條數(shù)據(jù)進(jìn)行連接組合,返回的結(jié)果除內(nèi)連接數(shù)據(jù)外,還包括表中不符合條件的數(shù)據(jù),并在左表的相應(yīng)列中添加NULL.
數(shù)據(jù)庫(kù)聯(lián)結(jié)查詢思想
- a 表有的數(shù)據(jù) b 表也必須要有
- b 依賴 a
- 所以 b 表的數(shù)據(jù)不給刪除 必須要 a 的刪除了 b 才能刪除
- 反正 外鍵就是維護(hù)兩張或者多張表的數(shù)據(jù)一致性
關(guān)聯(lián) 是兩張或多張表的邏輯關(guān)系
關(guān)聯(lián)不需要外鍵 - 關(guān)聯(lián)只是描述邏輯
- 它說(shuō)是外鍵 你想成關(guān)聯(lián)字段就行了 不是說(shuō)關(guān)聯(lián)就一定不能是外鍵 關(guān)聯(lián)字段也可以是外鍵 但是盡量不要是
- 文章 -> 帳戶
- 評(píng)論 -> 帳戶
這個(gè)時(shí)候有外鍵約束的話 帳戶就不給刪除
- 因?yàn)橐3謹(jǐn)?shù)據(jù)的一致性 你帳戶刪除了 那文章 評(píng)論就找不到帳戶了
- 要?jiǎng)h除帳戶就得把 這個(gè)帳戶的 文章 以及 評(píng)論全部刪除了 才能那個(gè)刪除帳戶
- 而關(guān)聯(lián) 則是 查詢文章的時(shí)候 看是誰(shuí)發(fā)的 那 拿文章關(guān)聯(lián)帳戶 去查詢
- 關(guān)聯(lián) 不須要外鍵 這是兩種東西
數(shù)據(jù)庫(kù)范式建表思想
所謂范式建表思想,就是指當(dāng)獲得業(yè)務(wù)需求和一大堆數(shù)據(jù)后,按照1NF、2NF亩钟、BCNF乓梨、3NF等進(jìn)行表關(guān)系的建立,目前還在學(xué)習(xí)當(dāng)中,后續(xù)將會(huì)舉例子出來(lái)
結(jié)束語(yǔ)
本文可能對(duì)SQL指令講解并不詳細(xì),還請(qǐng)讀者自行看書(shū)理解,或移步我的另一篇文章深入淺出后端開(kāi)發(fā)(SQL指令筆記).
如果您對(duì)這篇文章有什么意見(jiàn)或者建議,請(qǐng)?jiān)u論與我討論.
如果您覺(jué)得還不錯(cuò)的話~可以點(diǎn)個(gè)喜歡鼓勵(lì)我哦.
如果您想和我一起學(xué)習(xí),請(qǐng)毫不吝嗇的私信我吧~
介個(gè)是我的個(gè)人博客,歡迎參觀哦~