濰坊網(wǎng)站建設價格深圳百度推廣客服
目錄
- 1. 什么是數(shù)據(jù)庫
- 1.1 數(shù)據(jù)庫的定義
- 1.2 mysql 和 mysqld
- 1.3 文件和數(shù)據(jù)庫
- 2. 數(shù)據(jù)庫的分類
- 3. 連接數(shù)據(jù)庫
- 3.1 數(shù)據(jù)庫的安裝
- 3.2 連接服務器(數(shù)據(jù)庫)
- 3.3 服務器 數(shù)據(jù)庫 表 三者的關系
- 4. 數(shù)據(jù)庫-表 和目錄-文件 的關系
- 5. MySQL 框架
- 6. SQL 分類
- 7. 儲存引擎
1. 什么是數(shù)據(jù)庫
1.1 數(shù)據(jù)庫的定義
數(shù)據(jù)庫(Database)是一種按照數(shù)據(jù)結構來組織、存儲和管理數(shù)據(jù)的倉庫。通過數(shù)據(jù)庫管理系統(tǒng)(Database Management System, DBMS),用戶可以方便地對數(shù)據(jù)進行創(chuàng)建、查詢、更新和刪除等操作。數(shù)據(jù)庫的主要目的是有效地存儲和管理數(shù)據(jù),以便于多個用戶或應用程序能夠高效、安全地訪問和共享數(shù)據(jù)。
簡單的說就是一套給我們提供數(shù)據(jù)存儲的服務的網(wǎng)絡程序。
口頭上的數(shù)據(jù)庫一般指:在磁盤或者內(nèi)存中存儲特定結構的數(shù)據(jù) — 在磁盤上存儲的一套數(shù)據(jù)方案
數(shù)據(jù)庫的主要特征
- 數(shù)據(jù)結構化:
數(shù)據(jù)庫中的數(shù)據(jù)是以特定的結構組織的,例如表格形式(關系型數(shù)據(jù)庫)、文檔形式(NoSQL 數(shù)據(jù)庫)等。這種結構化的方式使得數(shù)據(jù)更容易管理和查詢。 - 數(shù)據(jù)獨立性:
數(shù)據(jù)獨立性是指數(shù)據(jù)的物理存儲與邏輯結構之間的分離。這意味著用戶可以不必關心數(shù)據(jù)是如何存儲的,只需關注如何使用數(shù)據(jù)。數(shù)據(jù)獨立性分為物理數(shù)據(jù)獨立性和邏輯數(shù)據(jù)獨立性。 - 數(shù)據(jù)共享:
多個用戶或應用程序可以同時訪問同一個數(shù)據(jù)庫中的數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的共享和協(xié)作。 - 數(shù)據(jù)控制:
數(shù)據(jù)庫管理系統(tǒng)提供了多種機制來控制數(shù)據(jù)的訪問和操作,包括用戶權限管理、事務管理、備份和恢復等,確保數(shù)據(jù)的安全性和一致性。 - 數(shù)據(jù)冗余減少:
通過數(shù)據(jù)的集中管理和規(guī)范化設計,數(shù)據(jù)庫可以減少數(shù)據(jù)冗余,提高數(shù)據(jù)的一致性和完整性。 - 數(shù)據(jù)持久性:
數(shù)據(jù)庫中的數(shù)據(jù)是持久化的,即使系統(tǒng)關閉或重啟,數(shù)據(jù)也不會丟失。
1.2 mysql 和 mysqld
-
客戶端 (mysql)
定義:mysql 是一個命令行工具,用于連接到 MySQL 服務器并執(zhí)行 SQL 命令。它是用戶與 MySQL 服務器進行交互的主要方式。
用途:用戶通過 mysql 客戶端發(fā)送 SQL 查詢、查看查詢結果、管理數(shù)據(jù)庫等。
使用場景:當你需要手動執(zhí)行 SQL 語句、查看數(shù)據(jù)庫狀態(tài)、創(chuàng)建和刪除數(shù)據(jù)庫、表等操作時,通常會使用 mysql 客戶端。 -
服務器端 (mysqld)
定義:mysqld 是 MySQL 的數(shù)據(jù)庫服務器進程。它是后臺運行的守護進程,負責處理來自客戶端的所有請求。
用途:mysqld 負責管理數(shù)據(jù)文件、處理查詢、執(zhí)行事務、維護數(shù)據(jù)的一致性和完整性等。
使用場景:通常情況下,mysqld 會在系統(tǒng)啟動時自動運行,并在后臺持續(xù)運行,等待客戶端的連接請求。
那MySQL數(shù)據(jù)庫是 mysql 還是 mysqld 呢?
我們使用的抖音也有客戶端和服務端,好比回答 抖音是客戶端還是服務端呢?抖音的客戶端和服務端一起工作保證正常使用抖音。
mysql本質(zhì):基于C(mysql) S(mysqld)模式的一種網(wǎng)絡服務。
既然是一種網(wǎng)絡服務,那么會綁定端口號(啟動服務器需要使用端口號)
查詢端口號:netstat -lntp
1.3 文件和數(shù)據(jù)庫
存儲數(shù)據(jù)用文件就可以了,為什么還要弄個數(shù)據(jù)庫?
文件保存數(shù)據(jù)有以下幾個缺點:
- 文件的安全性問題
- 文件不利于數(shù)據(jù)查詢和管理
- 文件不利于存儲海量數(shù)據(jù)
- 文件在程序中控制不方便
一般的文件確實提供了數(shù)據(jù)的存儲功能,但文件沒有提供非常好的數(shù)據(jù)管理能力(用戶角度)
什么是數(shù)據(jù)管理能力?
比如,給你一個文件,里面包含一萬條手機號碼,請你找出180開頭的所有手機號。普通的文件能快出的找出嗎?程序員自己找嗎?
數(shù)據(jù)庫作用?
對數(shù)據(jù)內(nèi)容存儲的一套解決方案,給數(shù)據(jù)庫服務端要求(找出所有180開有的手機號),數(shù)據(jù)庫服務端直接給出結果,不用程序員自己去找。
為了解決上述問題,專家們設計出更加利于管理數(shù)據(jù)的東西——數(shù)據(jù)庫,它能更有效的管理數(shù)據(jù)。數(shù)據(jù)庫的水平是衡量一個程序員水平的重要指標。
2. 數(shù)據(jù)庫的分類
主流數(shù)據(jù)庫:
- SQL Sever: 微軟的產(chǎn)品,.Net程序員的最愛,中大型項目。
- Oracle: 甲骨文產(chǎn)品,適合大型項目,復雜的業(yè)務邏輯,并發(fā)一般來說不如MySQL。
- MySQL:世界上最受歡迎的數(shù)據(jù)庫,屬于甲骨文,并發(fā)性好,不適合做復雜的業(yè)務。主要用在電
商,SNS,論壇。對簡單的SQL處理效果好。 - PostgreSQL :加州大學伯克利分校計算機系開發(fā)的關系型數(shù)據(jù)庫,不管是私用,商用,還是學術研
究使用,可以免費使用,修改和分發(fā)。 - SQLite: 是一款輕型的數(shù)據(jù)庫,是遵守ACID的關系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個相對小的C庫
中。它的設計目標是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的
低,在嵌入式設備中,可能只需要幾百K的內(nèi)存就夠了。 - H2: 是一個用Java開發(fā)的嵌入式數(shù)據(jù)庫,它本身只是一個類庫,可以直接嵌入到應用項目中。
數(shù)據(jù)庫的類型
- 關系型數(shù)據(jù)庫(Relational Database):
關系型數(shù)據(jù)庫是最常見的數(shù)據(jù)庫類型,數(shù)據(jù)以表格的形式存儲,每個表由行和列組成。常用的 SQL 語言用于查詢和管理數(shù)據(jù)。典型的例子包括 MySQL、Oracle、Microsoft SQL Server 和 PostgreSQL。 - 非關系型數(shù)據(jù)庫(NoSQL Database):
非關系型數(shù)據(jù)庫用于處理大規(guī)模、非結構化或半結構化數(shù)據(jù)。它們通常具有靈活的 schema 設計和水平擴展能力。常見的 NoSQL 數(shù)據(jù)庫包括 MongoDB、Cassandra、Redis 和 DynamoDB。 - 對象關系型數(shù)據(jù)庫(Object-Relational Database):
對象關系型數(shù)據(jù)庫結合了關系型數(shù)據(jù)庫和面向?qū)ο髷?shù)據(jù)庫的特點,支持對象的封裝、繼承和多態(tài)等特性。例如,PostgreSQL 就支持對象關系型特性。 - 層次型數(shù)據(jù)庫(Hierarchical Database):
- 層次型數(shù)據(jù)庫以樹狀結構組織數(shù)據(jù),每個記錄有一個父記錄和多個子記錄。典型的例子包括 IBM 的 IMS 系統(tǒng)。
- 網(wǎng)絡型數(shù)據(jù)庫(Network Database):
網(wǎng)絡型數(shù)據(jù)庫允許每個記錄有多個父記錄和多個子記錄,形成更為復雜的網(wǎng)狀結構。典型的例子包括 IDMS(Integrated Data Management System)。
數(shù)據(jù)庫管理系統(tǒng)(DBMS)
數(shù)據(jù)庫管理系統(tǒng)(Database Management System, DBMS)是用于創(chuàng)建、管理、維護和操作數(shù)據(jù)庫的軟件。DBMS 提供了用戶與數(shù)據(jù)庫交互的接口,支持數(shù)據(jù)的定義、查詢、更新和管理。常見的 DBMS 包括:
- 關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS):如 MySQL、Oracle、SQL Server、PostgreSQL。
- 非關系型數(shù)據(jù)庫管理系統(tǒng)(NoSQL DBMS):如 MongoDB、Cassandra、Redis。
- 對象關系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS):如 PostgreSQL。
- 層次型數(shù)據(jù)庫管理系統(tǒng):如 IBM IMS。
- 網(wǎng)絡型數(shù)據(jù)庫管理系統(tǒng):如 IDMS。
數(shù)據(jù)庫的應用
數(shù)據(jù)庫廣泛應用于各種領域,包括但不限于:
- 企業(yè)信息系統(tǒng):管理客戶關系、供應鏈、庫存等。
- 電子商務:處理訂單、支付、物流等。
- 金融系統(tǒng):管理賬戶、交易、風險管理等。
- 醫(yī)療保健:存儲患者記錄、醫(yī)療影像等。
- 社交媒體:管理用戶信息、動態(tài)、消息等。
- 物聯(lián)網(wǎng):收集和分析傳感器數(shù)據(jù)。
3. 連接數(shù)據(jù)庫
3.1 數(shù)據(jù)庫的安裝
保姆級安裝教程
3.2 連接服務器(數(shù)據(jù)庫)
-
命令:
mysql -h 8.148.27.113 -P 3306 -u root -p
說明:
-h:登錄mysql的主機的地址
-P:mysql在該主機的端口號
-u:登錄mysql的用戶名稱
-p:密碼(我的mysql沒有設置密碼,不需要輸入)
-
如果沒有寫 -h 127.0.0.1 默認是連接本地,如果沒有寫 -P 3306 默認是連接3306端口號,
在本地主機中有配置文件,可以直接去掉-h和-P命令:
mysql -u root -P
-
在mysql服務中退出mysql
命令:
quit
3.3 服務器 數(shù)據(jù)庫 表 三者的關系
- 所謂安裝數(shù)據(jù)庫服務器,只是在機器上安裝了一個數(shù)據(jù)庫管理系統(tǒng)程序,這個管理程序可以管理多
個數(shù)據(jù)庫,一般開發(fā)人員會針對每一個應用創(chuàng)建一個數(shù)據(jù)庫。 - 為保存應用中實體的數(shù)據(jù),一般會在數(shù)據(jù)庫中創(chuàng)建多個表,以保存程序中實體的數(shù)據(jù)。
數(shù)據(jù)庫服務器、數(shù)據(jù)庫和表的關系如下:
表是數(shù)據(jù)邏輯存儲結構:行列式結構(二維)
4. 數(shù)據(jù)庫-表 和目錄-文件 的關系
使用mysql建立一個數(shù)據(jù)庫,在數(shù)據(jù)庫中建立一張表結構,插入一些數(shù)據(jù) ------ 對比一下mysql在linux中是如何表現(xiàn)的
-
先查詢數(shù)據(jù)庫存儲在哪個目錄
命令:
vim /etc/my.cnf
我的數(shù)據(jù)的數(shù)據(jù)庫存儲在/var/lib/mysql 目錄中 -
進入到該目錄
命令:cd /var/lib/mysql
查看數(shù)據(jù)庫文件,命令:ls
標記的就是當前的數(shù)據(jù)庫 -
進入mysql客戶端,在mysql中查詢數(shù)據(jù)庫
命令:
show databases;
-
觀察
同學們可以觀察到 Linux 中標記的目錄就是當前 mysql 的數(shù)據(jù)庫的名稱 -
此時我在創(chuàng)建一個study_1 數(shù)據(jù)庫,然后再進入到 /var/lib/mysql 目錄并打開,可以看看發(fā)生了什么
所以,我們在mysql中新建的數(shù)據(jù)庫其實就是在linux中新建一個目錄。 -
我們打開這個數(shù)據(jù)庫的目錄
-
在mysql的study_1數(shù)據(jù)庫中創(chuàng)建一個表后再次打開數(shù)據(jù)庫目錄
在mysql的study_1數(shù)據(jù)庫中創(chuàng)建一個表test(不用管命令是什么意思,我們證明的是數(shù)據(jù)庫中的數(shù)據(jù)是文件)(1)創(chuàng)建一個表格
(2)再打開目錄后發(fā)現(xiàn)有新文件產(chǎn)生
-
我們還可以查看文件的大小
命令:
ls -l study_1
記住此時文件的大小(標記處是文件的大小)
-
在表中插入數(shù)據(jù)
-
再次查看文件的大小
命令:
ls -l study_1
我們發(fā)現(xiàn),文件的大小沒有改變;但并不是沒有數(shù)據(jù),而是mysql內(nèi)部的優(yōu)化造成的。其實,已經(jīng)把數(shù)據(jù)存入文件中了。
總結:
-
建立數(shù)據(jù)庫,本質(zhì)是在linux中創(chuàng)建一個目錄
-
在數(shù)據(jù)庫中創(chuàng)建表,本質(zhì)是在linux中創(chuàng)建對應的文件。
這個工作時誰做的呢?
答:mysqld 做的。/var/lib/mysql 中的文件不需要我們來操作,mysqld 自己去操作。
5. MySQL 框架
MySQL 是一個可移植的數(shù)據(jù)庫,幾乎能在當前所有的操作系統(tǒng)上運行,如 Unix/Linux、Windows、
Mac 和 Solaris。各種系統(tǒng)在底層實現(xiàn)方面各有不同,但是 MySQL 基本上能保證在各個平臺上的物理體
系結構的一致性。
-
Client Connectors: 連接器層提供了多種語言的接口,例如 JDBC、ODBC、.NET、PHP、Python、Perl 和 C API,用于連接到 MySQL 服務器。應用程序可以通過這些接口發(fā)送查詢請求,并接收響應結果。
-
MySQL Server: MySQL 服務器是整個系統(tǒng)的中心,負責處理來自客戶端的各種請求。它由多個模塊組成,如下所示:
- Services & utilities: 提供備份恢復、安全、復制和分區(qū)等功能的服務和實用工具。
- SQL Interface: 解析和執(zhí)行 SQL 查詢的接口。
- Connection Pool: 連接池管理、認證和安全性相關的功能。
- Parser: 分詞器、語法分析器和語義分析器,用于解析 SQL 查詢。
- Optimizer: 查詢優(yōu)化器,用于確定最佳查詢執(zhí)行計劃。
- Caches: 包括全局緩存和引擎特定緩存,提高性能。
-
Pluggable Storage Engines: MySQL 支持可插拔式存儲引擎,每個引擎都有自己的特性。MyISAM 是一個非事務性引擎,適用于讀取密集型應用;InnoDB 則是一個事務性引擎,支持 ACID 事務和外鍵約束;Federated 引擎將多個 MySQL 實例鏈接在一起;Archive 引擎適合存儲大量數(shù)據(jù)而不需要頻繁更新的應用;Merge 引擎用于合并多個 MyISAM 表;Memory 引擎將數(shù)據(jù)存儲在內(nèi)存中,速度非???#xff1b;Cluster 引擎用于分布式環(huán)境;Example 引擎是一個示例引擎,用于演示目的。
-
- File System: MySQL 使用底層文件系統(tǒng)(如 NTFS、ext4、SAN 或 NAS)來存儲數(shù)據(jù)和日志文件。
- Logs and Files: MySQL 產(chǎn)生的各種日志文件,包括二進制日志(記錄所有更改)、錯誤日志、慢查詢?nèi)罩?、一般查詢?nèi)罩尽⒅刈鋈罩?、回滾日志以及數(shù)據(jù)和索引文件。
總這張圖清晰地展示了 MySQL 服務器如何處理客戶端請求,以及不同組件之間的交互關系。客戶端通過連接器發(fā)送 SQL 請求給 MySQL 服務器,服務器解析請求、優(yōu)化查詢、訪問存儲引擎并最終將結果返回給客戶端。同時,MySQL 也利用緩存、索引和日志機制來提升性能和可靠性。
6. SQL 分類
-
DDL【data definition language】 數(shù)據(jù)定義語言,用來維護存儲數(shù)據(jù)的結構
代表指令: create, drop, alter -
DML【data manipulation language】 數(shù)據(jù)操縱語言,用來對數(shù)據(jù)進行操作
代表指令: insert,delete,update -
DML中又單獨分了一個DQL,數(shù)據(jù)查詢語言,代表指令: select
-
DCL【Data Control Language】 數(shù)據(jù)控制語言,主要負責權限管理和事務
代表指令: grant,revoke,commit
7. 儲存引擎
存儲引擎是:數(shù)據(jù)庫管理系統(tǒng)如何存儲數(shù)據(jù)、如何為存儲的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術
的實現(xiàn)方法。
MySQL的核心就是插件式存儲引擎,支持多種存儲引擎。
查看存儲引擎:
show engines
在Linux中,設置默認存儲引擎
命令:vim /etc/my.cnf
我設置的默認存儲引擎。