???????
一、數據庫基礎
1.1 認識數據庫
為什么學習數據庫
- 瞬時數據:比如內存中的數據,是不能永久保存的。
- 持久化數據:比如持久化至數據庫中或者文檔中,能夠長久保存。
???????數據庫是“按照數據結構來組織、存儲和管理數據的倉庫”。是一個長期存儲在計算機內的、有組織的、可共享的、統一管理的大量數據的集合。
1.2 數據庫的相關概念
1.2.1 DB
???????DB(英文全稱database,數據庫)是依照某種數據模型組織起來并存放二級存儲器中的數據集合。
1.2.2 DBMS
???????數據庫管理系統(DatabaseManagementSystem)是一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫,簡稱DBMS。
1.2.3 SQL
???????結構化查詢語言(StructuredQueryLanguage)簡稱 SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。
???????SQL是一種ANSI(美國國家標準協會)的標準,但也有許多不同版本的SQL語言。SQL是關系數據庫系統的標準語言。所有關系型數據庫管理系統,如MySQL,SQLServer,Oracle,Sybase,postgreSQL 和 MSAccess使用SQL作為標準數據庫語言。
1.2.3.1 SQL 使用
允許用戶訪問在關系數據庫管理系統的數據。
讓用戶來描述數據。
允許用戶定義數據庫中的數據和處理數據。
允許使用SQL模塊,庫和預編譯器的其他語言中嵌入。
允許用戶創建和刪除數據庫和表。
允許用戶創建視圖,存儲過程,函數在數據庫中。
允許用戶設置表,過程和視圖的權限
1.2.3.2 SQL 命令
???????標準的SQL命令進行互動使用在關系型數據庫有:CREATE,SELECT,INSERT,UPDATE,DELETE 和
DROP。這些命令可分為基于其性質組。
- DQL(Data Query Language)- 數據查詢語言
- DML(Data Manipulate Language)-數據操作語言
- DDL(Data Define Languge)- 數據定義語言
- DCL(Data Control Language)-數據控制語言
- TCL(Transaction Control Language)- 事務控制語言 commit、rollback
1.2.4 數據庫術語
數據庫:數據庫是一些關聯表的集合。
數據表:表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
列:一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
冗余:存儲兩倍數據,冗余降低了性能,但提高了數據的安全性。
主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
外鍵:外鍵用于關聯兩個表。
復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引。
索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似于書籍的目錄。
參照完整性:參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。
1.2.5 數據模型
1.2.5.1 模型
???????模型是對事務、對象、過程等客觀系統中的內容的模擬和抽象表達。
1.2.5.2 數據模型
???????數據模型也是一種模型,它是對現實世界數據特征的抽象。
???????數據模型分為兩大類:概念模型、組織層數據模型也稱組織模型。
組織模型分為:層次模型(用樹形結構組織數據)、網狀模型(用圖形結構組織數據)、關系模型(用簡單二維表結構組織數據)、對象-關系模型(用復雜的表格以及其他組織結構組織數據)。
???????數據模型是數據庫的基礎,數據是對客觀事物的符號表示,模型是現實世界的抽象。
???????信息世界是對現實世界的抽象,人們把事物的特征和聯系通過符號記錄下來,并用規范化的語言描述現實世界的事物,從而構成一個基于現實世界的信息世界,這個信息世界就是概念模型。概念模型主要用來描述顯示世界的概念化結構,它使數據庫的設計人員在設計的初始階段,擺脫計算機系統及數據庫管理系統的具體技術問題,集中精力分析數據以及數據之間的聯系。在概念模型中,最常用的設計模型就是實體—聯系模型(ER模型)。
???????邏輯數據模型是具體的數據庫管理系統所支持的數據模型,主要有**關系數據模型、層次數據模型和網狀數據模型。**關系數據模型是目前最流行的數據庫模型,支持關系數據模型的數據庫管理系統稱為關系數據庫管理系統,MySQL就屬于關系數據庫管理系統。關系數據模型以二維表結構來表示事物與事物之間的聯系,也可以稱為實體與實體之間的聯系。
1.3 數據庫種類
???????邏數據庫模型主要是兩種,即關系型數據庫和非關系型數據庫。
1.3.1 關系型數據庫
???????關系型數據庫,是指采用了關系模型來組織數據的數據庫。
- 關系模型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系所 組成的一個數據組織。
- 通過SQL結構化查詢語句存儲數據。
- 強調ACID規則, 保持數據一致性,ACID規則即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)
1.3.2 Nosql 數據庫
???????NoSQL 最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL 僅僅是一個概念,泛指非關系型的數據庫,區別于關系數據庫,它們不保證關系數據的ACID特性。
???????NoSQL 的產生并不是要徹底地否定關系型數據庫,而是作為傳統關系型數據庫的一個有效補充。NOSQL數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。
1、NOSQL 不是否定關系數據庫,而是作為關系數據庫的一個重要補充
2、NOSQL 為了高性能、高并發而生,忽略影響高性能,高并發的功能
3、NOSQL 典型產品memcached(純內存),redis(持久化緩存),mongodb(文檔的數據庫)。
1.3.3 關系型數據庫和非關系型數據庫優缺點
???????關系型數據庫優缺點:
優點:
1、易于維護:都是使用表結構,格式一致;
2、使用方便:SQL語言通用,可用于復雜查詢;
3、復雜操作:支持SQL,可用于一個表以及多個表之間非常復雜的查詢。
缺點:
1、讀寫性能比較差,尤其是海量數據的高效率讀寫;
2、固定的表結構,靈活度稍欠;
3、高并發讀寫需求,傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸。
???????非關系型數據庫優缺點:
優點:
1、格式靈活:存儲數據的格式可以是key,value形式、文檔形式、圖片形式等等,文檔形式、
圖片形式等等,使用靈活,應用場景廣泛,而關系型數據庫則只支持基礎類型。
2、速度快:nosql可以使用硬盤或者隨機存儲器作為載體,而關系型數據庫只能使用硬盤;
3、高擴展性;
4、成本低:nosql數據庫部署簡單,基本都是開源軟件。
缺點:
1、不提供sql支持,學習和使用成本較高;
2、無事務處理;
3、數據結構相對復雜,復雜查詢方面稍欠。
1.4.2 數據庫存儲數據的特點
???????將數據放列表中,表再放到庫中
???????一個數據庫中可以有多個表,每個表都有一個的名字,用來標識自己。表名具有唯一性。
表具有一些特性,這些特性定義了數據在表中如何存儲,類似C++中“類”的設計表由列組成,我們也稱為字段。所有表都是由一個或多個列組成的,每一列類似C++中的“屬性”。
???????表中的數據是按行存儲的,每一行類似于C++中的“對象”。
對于學員管理系統數據庫中的表設計有如下:
(1) 學生檔案信息表
(2) 班級設置信息表
(3) 院系信息表
(4) 寢室信息表
(5) 用戶信息表
二、初始化MySQL
2.1 MySQL 產品介紹
2.1.2 平臺及軟件支持
???????支持各種平臺,常搭配Linux。組成的LAMP(Linux-Apache-MySQL-PHP)網站架構是目前國際流行的網站架構方案。
2.1.3 體系結構
???????MySQL 體系結構
???????MySQL 由以下幾部分組成:
連接池組件、管理服務和工具組件、SQL接口組件、查詢分析器組件、優化器組件、緩沖組
件、插件式存儲引擎、物理文件。
連接者:不同語言的代碼程序和mysql的交互(SQL交互)
1、連接池 管理、緩沖用戶的連接,線程處理等需要緩存的需求
2、管理服務和工具組件 系統管理和控制工具,例如備份恢復、Mysql復制、集群等
3、sql 接口 接受用戶的SQL命令,并且返回用戶需要查詢的結果
4、查詢解析器SQL命令傳遞到解析器的時候會被解析器驗證和解析(權限、語法結構)
5、查詢優化器 SQL語句在查詢之前會使用查詢優化器對查詢進行優化
select id,name from user where age = 40;
???????a.這個select 查詢先根據where語句進行選取,而不是先將表全部查詢出來以后再進行age過濾
???????b.這個select查詢先根據id和name進行屬性投影,而不是將屬性全部取出以后再進行過濾
???????c.將這兩個查詢條件聯接起來生成最終查詢結果
6、緩存如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據
7、插入式存儲引擎存儲引擎說白了就是如何管理操作數據(存儲數據、如何更新、查詢數據等)的一種方法。因為在關系數據庫中數據的存儲是以表的形式存儲的,所以存儲引擎也 可以稱為表類型(即存儲和操作此表的類型)