數據庫基礎
本章導航:
- 了解什么是數據庫
- 掌握什么是表、數據類型和主鍵
- 熟悉數據庫的技術構成
- 熟悉什么是 MySQL
- 掌握常見的 MySQL 工具
- 了解如何學習 MySQL
數據庫由一批數據構成有序的集合,這些數據被存放在結構化的數據表里。數據表之間相互關聯,反映了客觀事物間的本質聯系。
數據庫系統提供對數據的安全控制和完整性控制。
1.1、什么是數據庫
數據庫的概念誕生於 60 年前,隨着信息技術和市場的快速發展,數據庫技術層出不窮,隨着應用的擴展和深入,數據庫的數量和規模越來也大,其誕生和發展給計算機信息管理帶來了一場巨大的革命。
數據庫的發展大致划分為如下幾個階段:人工管理階段、文件系統階段、數據庫系統階段、高級數據庫階段。其種類大概有 3 種:層次式數據庫、網絡式數據庫和關系型數據庫。不同種類的數據庫按不同的數據結構來聯系和組織。
對於數據庫的概念,沒有一個完全固定的定義,隨着數據庫歷史的發展,定義的內容也有很大的差異,其中一種比較普遍的觀點認為,數據庫(DataBase,DB)是一個長期存儲在計算機內的、有組織的、有共享的、統一管理的數據集合。它是一個按數據結構來存儲和管理的計算機軟件系統。數據庫包含兩層含義:保管數據的“倉庫”,以及數據管理的方法和技術。
數據庫的特點是:實現數據共享,減少數據冗余;采用特定的數據類型;具有較高的數據獨立性;具有統一的數據控制功能。
1.2、表
在關系數據庫中,數據庫表示一系列二維數組的集合,用來存儲和操作數據的邏輯結構。它由縱向的列和橫向的行組成。行被稱為記錄,是組織數據的單位;列被稱為字段,每一列表示記錄的一個屬性,有相應的描述信息,如數據類型、數據寬度等。
例如,一個有關作者信息的名為 authors 的表中,每列包含作者某個特定類型的信息,比如 "姓名",而每行則包含了某個特定作者的所有信息(編號、姓名、性別、專業):

1.3、數據類型
數據類型決定了數據在計算機中的存儲格式,代表不同的信息類型。常用的數據類型有整數數據類型、浮點數數據類型、精確小數類型、二進制數據類型、日期/時間數據類型、字符串數據類型。
表中的每一個字段就是某種指定數據類型。比如圖中 "編號" 字段為整數數據,"性別" 字段為字符型數據。
1.4 主鍵
主鍵(Primary Key)又稱主碼,用於唯一地標識表中的每一條記錄。可以定義表中的一列或多列為主鍵,主鍵列上既不能有兩行相同的值,也不能為空值。假如,定義 authors 表,該表給每一個作者分配一個 "作者編號",該編號作為數據表的主鍵。如果出現相同的值,將提示錯誤,系統不能確定查詢的究竟是哪一條記錄;如果把作者的 “姓名” 作為主鍵,則不能出現重復的名字,這與現實中的情況不符,因此 "姓名" 字段不適合作為主鍵。
2.1 數據庫技術構成
數據庫系統由硬件部分和軟件部分共同構成。硬件主要用於存儲數據庫中的數據,包括計算機、存儲設備等。軟件部分主要包括 DBMS、支持 DBMS 運行的操作系統,以及支持多種語言進行應用開發的訪問技術等。
數據庫系統有 3 個主要的組成部分:
- 數據庫:用於存儲數據的地方。
- 數據庫管理系統:用於管理數據庫的軟件。
- 數據庫應用程序:為了提高數據庫系統的處理能力所使用的管理數據庫軟件補充。
數據庫系統(Database System)提供了一個存儲空間,用以存儲各種數據,可以將數據視為一個存儲數據的容器。一個數據庫可能包含許多文件,一個數據庫系統中通常包含許多數據庫。
數據庫管理系統(Database Management System,DBMS)是用戶創建、管理和維護數據庫時候所使用的軟件,位於用戶與操作系統之間,對數據庫進行統一管理。DBMS 能定義數據存儲結構,提供數據的操作機制,維護數據庫的安全性、完整性和可靠性。
數據庫應用程序(DatatBaseApplication)雖然已經有了 DBMS,但是在很多情況下,DBMS 無法滿足對數據管理的要求。數據庫應用程序的使用可以滿足對數據管理的更高要求,還可以使數據管理過程更加直觀和友好。數據庫應用程序負責與 DBMS 進行通信,訪問和管理 DBMS 中存儲的數據,允許用戶插入、修改、刪除 DB 中的數據。
數據庫系統如下圖所示:

2.2 SQL語言
對數據庫進行查詢和修改操作的語言叫做 SQL。SQL 的含義是結構化查詢語言(Structured Query Language)。SQL 有許多不同的類型,有 3 個主要的標准:ANSI(美國國家標准機構)SQL;對 ANSI SQL 修改后在 1992 年采納的標准,成為 SQL-92 或 SQL2;最近的 SQL-99 標准,從 SQL2 擴充而來,並增加了對象關系特征和許多其他新功能。各大數據庫廠商提供不同版本的 SQL,這些版本的 SQL 不但能包括原始的 ANSI 標准,而且在很大程度上支持 SQL-92 標准。
SQL 語言包含以下 4 部分:
(1)數據定義語言(DDL):DROP、CREATE、ALTER 等語句。
(2)數據操作語言(DML):INSERT(插入)、UPDATE(修改)、DELETE(刪除) 語句。
(3)數據查詢語言(DQL):SELECT 語句。
(4)數據控制語言(DCL):GRANT、REVOKE、COMMIT、ROLLABCK 等語句。
2.3 數據庫訪問接口
不同的程序設計語言會有各自不同的數據庫訪問接口,程序語言通過這些幾口執行 SQL 語句,進行數據庫管理。主要的數據庫訪問接口有 ODBC、JDBC、ADO.NET 和 PDO。
1、ODBC
ODBC(Open Database Connectivity,開放數據庫連接)技術為訪問不同的 SQL 數據庫提供了一個共同的接口。ODBC 使用 SQL 作為訪問數據的標准。這一接口提供了最大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 數據庫管理系統(DBMS)。
2、JDBC
JDBC(Java Data Base Connectivity,Java 數據庫連接)用於 Java 應用程序連接數據庫的標准方法,是一種用於執行 SQL 語句的 Java API,可以為多種關系數據庫提供統一訪問,由一組用 JAVA 語言編寫的類和接口組成。
3、ADO.NET
ADO.NET 是微軟在 .NET 框架下開發設計的一組用於和數據源進行交互的面向對象類庫。
4、PDO
PID(PHP Data Object)為PHP 訪問數據庫定義了一個輕量級的、一致性的接口,提供了一個數據訪問抽象層。這樣,無論使用什么數據庫,都可以通過一致的函數執行查詢和獲取數據。
針對不同的程序語言,在 MySQL 提供了不同數據庫訪問連接驅動,讀者可以在下載頁面(https://dev/MySQL.com/downloads/)下載相關驅動。
3.1 什么是 MySQL
MySQL 是一個小型關系數據庫管理系統。與其他大型數據庫管理系統(例如 Oracle、DB2、SQL Server 等)相比,MySQL 規模小、功能有限,但是它體積小、速度快、成本低,並且提供的功能對稍微復雜的應用來說已經夠用,這些特性使得 MySQL 成為世界上最受歡迎的開放源代碼數據庫。
3.2 客戶端/服務器軟件
主從式架構(Client-Server Model)或客戶端/服務器(Client/Server)結構(簡稱 C/S 結構),是一種網絡架構,通常在該網絡架構下的軟件可分為客戶端(Client)和服務器(Server)。
3.3 MySQL 版本
針對不同用戶,MySQL 分為兩個不同的版本:
-
- MySQL Community Server(社區版服務器):該版本完全免費,但是官方不提供技術支持。
- MySQL Enterprise Server(企業版服務器):能夠以很高的性價比為企業提供數據倉庫應用,支持 ACID 事務處理,提供完成的提交、回滾、崩潰恢復和行級鎖定功能。但是該版本需要付費使用,官方提供電話技術支持。
- MySQL Cluster 主要用於架設集群服務器,需要在社區版或企業版基礎上使用。
MySQL 的命名機制由 3 個數字和 1 個后綴組成,例如:MySQL-8.0.13 版本。
(1)第 1 個數字(8)是主版本號,描述了文件格式,所有版本 8 的發行版都有相同的文件格式。
(2)第 2個數字(0)是發行級別,主版本號和發行級別組合在一起便構成了發行序列號。
(3)第 3 個數字(13)是在此發行系列的版本號,隨每次新分發版本遞增。通常選擇已經發行的最新版本。
在 MySQL 開發過程中,同時存在多個發布系列,每個發布處在成熟度的不同階段。
(1)MySQL 8.0 是最新開發的穩定(GA)發布系列,是將執行新功能的系列,目前已經可以正常使用。
(2)MySQL 8.0 是比較穩定(GA)發布系列。只針對漏洞修復重新發布,沒有增加會影響穩定性的新功能。
(3)MySQL 5.7 是前一穩定(產品質量)發布系列。只針對嚴重漏洞修復和安全修復重新發布,沒有增加會影響該系列的重要功能。
3.4 MySQL 的優勢
(1)速度:運行速度快。
(2)價格:MySQL 對多數個人來說是免費的。
(3)容易使用:與其他大型數據庫的設置和管理相比,其復雜程度較低,易於學習。
(4)可移植性:能夠工作在眾多不同的系統平台上,例如 Linux、Windows、mac 等。
(5)豐富的接口:提供了用於 C、C++、Java、Python、Ruby等語言的API。
(6)支持查詢語言:MySQL 可以利用標准 SQL 語法和支持 ODBC 的應用程序。
(7)安全性和連接性:十分靈活和安全的權限和密碼系統,允許基於主機的驗證。連接到服務器時,所有的密碼傳輸均采用加密形式,從而保證了密碼安全。由於 MySQL 是網絡化的,因此可以在因特網上的任何地方訪問,提高數據共享的效率。
4.1 MySQL 工具
MySQL 數據庫管理系統提供了許多命令行工具,這些工具可以用來管理 MySQL 服務器、對數據庫進行訪問控制、管理 MySQL 用戶以及數據庫備份和恢復工具等。
MySQL 命令行使用程序:
MySQL 服務器端實用工具程序如下:
(1) mysqld:SQL 后台程序(MySQL 服務器進程)。必須在該程序運行之后,客戶端才能通過連接服務器來訪問數據庫。
(2) mysqld_safe:服務器啟動腳本。在 UNIX 和 NetWare 中推薦使用 mysqld_safe 來啟動 mysqld 服務器。mysqld_safe 增加了一些安全特性,例如當出現錯誤時重啟服務器並向錯誤日志文件寫入運行時間信息。
(3) mysql.server:服務器啟動腳本。該腳本用於使用包含為特定級別的、運行啟動服務的腳本的、運行目錄的系統。它調用 mysqld_safe 來啟動 MySQL 服務器。
(4) mysql_multi:服務器啟動腳本,可以啟動或停止系統上安裝的多個服務器。
(5) myisamchk:用來描述、檢查、優化和維護 MyISAM 表的實用工具。
(6) mysqlbug:MySQL 缺陷報告腳本。它可以用來向 MySQL 郵件系統發送缺陷報告。
(7) mysql_install_db:該腳本用默認權限創建 MySQL 授權表。通常只是在系統上首次安全 MySQL 時執行一次。
MySQL 客戶端實用工具程序如下:
(1) myisampack:壓縮 MyISAM 表,以產生更小的只讀表的一個工具。
(2) mysql:交互式輸入 SQL 語句或從文件以批處理模式執行它們的命令行工具。
(3) mysqlaccess:檢查訪問主機名、用戶名和數據庫組合的權限的腳本。
(4) mysqladmin:執行管理操作的客戶程序,例如創建和刪除數據庫、重載授權表、將表刷新到硬盤上以及重新打開日志文件。mysqladmin 還可以用來檢索版本、進程,以及服務器的狀態信息。
(5) mysqlbinlog:從二進制日志讀取語句的工具。在二進制日志文件中包含執行過的語句,可用來幫助系統從崩潰中恢復。
(6) mysqlcheck:檢查、修復、分析以及優化表的表維護客戶程序。
(7) mysqldump:將 MySQL 數據庫轉儲到一個文件(例如 SQL 語句或 tab 分隔符文本文件)的客戶程序。
(8) mysqlhotcopy:當服務器在運行時,快速備份 MyISAM 或 ISAM 表的工具。
(9) mysqlimport:使用 LOAD DATA INFILE 將文本文件導入相關表的客戶程序。
(10) mysqlshow:顯示數據庫、表、列以及索引相關信息的客戶程序。
(11) perror:顯示系統或 MySQL 錯誤代碼含義的工具。
4.2 MySQL Workbench
MySQL Workbench 是下一代可視化數據庫設計軟件,為數據庫管理員和開發人員提供了一整套可視化數據庫操作環境,主要功能有:
- 數據庫設計和模型建立。
- SQL 開發(取代 MySQL Query Browser)。
- 數據庫管理(取代 MySQL Administrator)。
MySQL Workbench 有兩個版本:
- MySQL Workbench Community Edition(也叫 MySQL Workbench OSS,社區版),是在 GPL 證書下發布的開源社區版本。
- MySQL Workbench Standard Edition(也叫 MySQL Workbench SE,商業版),是按年收費的商業版本。
5.1 如何學習 MySQL
官網yyds(https://www.mysql.com/)
