1 MySQL學習路線 基礎階段:MySQL資料庫的基本操作(增刪改查),以及一些高級操作(視圖、觸發器、函數、存儲過程等)。 優化階段:如何提高資料庫的效率,如索引,分表等。 部署階段:如何搭建真實的環境系統,如伺服器集群,負載均衡等。 2 資料庫的基礎 2.1 什麼是資料庫? 資料庫:datab ...
1 MySQL學習路線
- 基礎階段:MySQL資料庫的基本操作(增刪改查),以及一些高級操作(視圖、觸發器、函數、存儲過程等)。
- 優化階段:如何提高資料庫的效率,如索引,分表等。
- 部署階段:如何搭建真實的環境系統,如伺服器集群,負載均衡等。
2 資料庫的基礎
2.1 什麼是資料庫?
- 資料庫:database,存儲數據的倉庫。
- 資料庫(專業定義):高效的存儲和處理數據的介質(介質主要是兩種:磁碟和記憶體)。
2.2 資料庫的分類?
- 基於存儲介質的不同
- 關係型資料庫(SQL)
- 非關係型資料庫(NoSQL)
2.3 不同的資料庫陣營中的產品有哪些?
- 關係型資料庫:
- 大型資料庫:Oracle、DB2。
- 中型資料庫:SQL Server、MySQL等。
- 小型資料庫:access等。
- 非關係型資料庫:
- memached
- mogodb
- redis
2.4 兩種資料庫陣營的區別?
- 關係型資料庫:安全(保存磁碟基本不可能丟失),容易理解,比較浪費空間。
- 非關係型資料庫:效率高,不安全(斷電會丟失)。
3 關係型資料庫
3.1 什麼是關係型資料庫?
- 關係型資料庫:是一種建立在關係模型(數學模型)上的資料庫。
- 關係模型:一種所謂建立在關係的模型,關係模型包括以下三個方面:
- 數據結構:數據存儲的問題,二維表(有行和列)。
- 操作指令集合:所有SQL語句。
- 完整性約束:表內數據約束,表與表之間約束(外鍵)。
3.2 關係型數據的設計?
- 從需要存儲的數據需求中分析,如果是一類數據(實體,比如人、書本等)應該設計成一張二維表,表是由表頭(欄位名)和數據部分(實際存儲的數據單元)組成,如下圖所示。
表頭 | 欄位1 | 欄位2 |
數據單元 | 數據1 | 數據2 |
- 以實際案例來進行處理:分析一個教學系統,講師負責教學,教學生,在教室教學。
- ①找出系統中的實體:講師表,學生表,班級表。
- ②找出實體中應該存在的數據信息:
- 講師:姓名,性別,年齡,身高,工資等。
- 學生:姓名,性別,學好,學科等。
- 班級:班級名字,教室編號等。
-
-
- 關係型資料庫:維護的是實體內部,實體與實體之間的聯繫。
- 實體內部的聯繫:每個學生都有姓名,性別,學號,學科,年齡等信息。
-
姓名 | 性別 | 學號 | 學科 | 年齡 |
張三 | 男 | 001 | java | 23 |
李四 | 男 | 002 | MySQL | |
王二 | 003 | Linux | 17 |
-
-
- 第二行的所有欄位,都是描述張三這個學生(內部聯繫);第二列只能存放性別(內部約束)。
- 關係型資料庫的特點之一:如果表中對應的某個欄位沒有值(數據),但是系統依然需要分配空間,所以關係型資料庫比較浪費空間。
-
-
-
- 實體與實體之間的聯繫:每個學生屬於某個班級,每個班級一定有多個學生(一對多)。
- 學生表:
-
姓名 | 性別 | 學號 | 學科 | 年齡 |
張三 | 男 | 001 | java | 23 |
李四 | 男 | 002 | MySQL | |
王二 | 003 | Linux | 17 |
-
-
- 班級表:
-
班級名稱 | 教室編號 |
java001 | A001 |
Linux002 | B005 |
-
-
- 解決方案:在學生表中增加一個班級欄位來指向班級(必須能夠唯一的找到一個班級信息)
-
姓名 | 性別 | 學號 | 學科 | 年齡 | 所屬班級 |
張三 | 男 | 001 | java | 23 | java001 |
李四 | 男 | 002 | MySQL | MySQL005 | |
王二 | 003 | Linux | 17 | Linux002 |
-
-
- 學生實體與班級實體之間的關係:實體與實體之間的關係。
-
4 關鍵字說明
- 資料庫:database。
- 資料庫系統:database system(DBS):是一種虛擬系統,將多種內容關聯起來的稱呼。DBS=DBMS+DB。
- DBMS:資料庫管理系統,database management system,專門管理資料庫。
- DBA:資料庫管理員,database administrator。
- 行/記錄:row/record,本質是一個東西,都是指表中的一行(一條記錄)。行是從結構角度,記錄是從數據角度出發。
- 列/欄位:column/Field,本質是一個東西。
5 SQL
- SQL:Structured Query Language,結構化查詢語言(數據主要以查詢為主)。
- SQL分為三個部分:
- DDL:Data Definition Language,數據定義語言。用來維護存儲數據的結構(資料庫,表),代表指令:create、drop、alter等。
- DML:Data Manipulation Language,數據操作語言,用來對數據進行操作(數據表中的內容),代表指令:Insert、delete、update等。其中DML內部又單獨進行了一個分類:DQL(Data Query Language:數據查詢語言,如select)。
- DCL:Data Control Language,數據控制語言,主要負責許可權管理,代表指令:grant、revoke等。
- SQL是關係型資料庫的操作指令,SQL是一種約束,但不強制(類似於W3C),所以不同的關係型資料庫產品(Oracle,MySQL等)內部可能有一些細微的差別。
6 MySQL資料庫
- MySQL資料庫是一種C/S結構的軟體:客戶端/服務端,如果想訪問伺服器必須通過客戶端(伺服器一直運行,客戶端在需要使用的時候運行)。
- 交互方式:
- ①客戶端連接認證:連接伺服器,認證身份。
-
- ②發送SQL指令。
- ③伺服器接收SQL指令,處理SQL指令,返回操作結果。
- ④客戶端接收結果,顯示結果。
-
- ⑤斷開連接(釋放資源:伺服器併發限制)。
7 MySQL伺服器對象
- 沒有辦法完全瞭解伺服器內部的內容:只能粗略的去分析資料庫伺服器的內部結構。
- 將MySQL伺服器內部對象分成了四層:
- 系統(DBMS)
- 資料庫(DB)
- 數據表(Table)
- 欄位(Field)
8 SQL的基本操作
- 基本操作:CRUD。
- 將SQL的基本操作根據操作對象進行分類,分為三類,如下所示:
- 庫操作。
- 表操作(欄位)。
- 數據操作。
9 庫操作
- 對資料庫的增刪改查。
9.1 新增資料庫
- 基本語法
create database 資料庫名字 [庫選項];
- 庫選項:用來約束資料庫,分為兩個選項。
- 字元集設定:charset/character set 具體字元集(數據存儲的編碼格式)。
- 校對集設定:collate 具體校對集(數據比較的規則)。
- 示例:創建一個資料庫。
-- 單行註釋,也可以用# # 創建資料庫 CREATE DATABASE mydatabase CHARACTER SET utf8;
- 其實,資料庫名字不能使用關鍵字(已經被使用的字元)或保留字(將來可能會使用的字元)。
- 當創建資料庫的SQL語句執行之後,發生了什麼?
- ①在資料庫系統中,增加了對應的資料庫信息。
- ②會在保存數據的文件夾下:Data目錄,創建一個對應資料庫名字的文件夾。
-
- ③每個資料庫下都有一個opt文件:保存了庫選項。
9.2 查看資料庫
- 基本語法
- ①查看所有資料庫。
-- 查看所有資料庫 show databases;
-
- ②查看指定部門的資料庫:模糊查詢。
-- 查看指定部分的資料庫 show databases like 'pattern'; -- pattern是匹配模式 %:表示匹配多個字元 _:表示匹配單個字元
-
- ③查看資料庫的創建語句。
-- 查看資料庫的創建語句 show create database 資料庫名字;
- 示例:查看所有資料庫
- 示例:查看指定名稱為test的資料庫。
- 示例:查看含有t名稱的資料庫。
- 示例:顯示mydatabase資料庫的創建語句。
9.3 更新資料庫
- 資料庫名字是不可以改變的,不然如何定位哪一個資料庫,換句話說,原來有一個資料庫名為test,你現在將其它資料庫改為test,這樣好嗎?
- 資料庫的修改僅限庫選項:字元集和校對集(校對集依賴於字元集)。
- 基本語法
alter database 資料庫名字 [庫選項]。 character set [字元集] collate 絞對集
- 示例:修改mydatabase資料庫的預設編碼。
9.4 刪除資料庫
- 所有的操作中:刪除是最簡單的。
- 基本語法
-- 刪除資料庫 drop database 資料庫名字;
- 示例:刪除mydatabase資料庫。
- 當刪除資料庫語句執行之後,發生了什麼?
- 在資料庫內部看不到對應的資料庫。
- 在對應的資料庫存儲的文件夾內,資料庫名字對應的文件夾也被刪除(級聯刪除:裡面的資料庫表一起被刪除)。
- 註意:資料庫的刪除不是鬧著玩的,不要隨意的刪除,應該先進行備份操作,然後才考慮是否刪除(刪除不可逆)。
10 表操作