目錄
?一,數據庫簡介
二,數據庫的基本概念
1,數據
2,數據庫和數據庫表
3,數據庫管理系統和數據庫系統
三,主流數據庫介紹
四,數據庫的兩大類型
1,關系型數據庫
主鍵
外鍵
2,非關系型數據庫
3,關系型與非關系型數據庫的區別
五:經典數據庫模型
關系模型
層次模型
網狀模型
面向對象模型
六,使用二進制安裝MySQL數據庫
1,基礎環境準備
2,二進制安裝Mysql
3,編寫配置文件
4,配置systemctl方式啟動
5,訪問mysql數據庫并修改密碼
?一,數據庫簡介
使用數據庫可以高效且條理分明地存儲數據,使人們能夠更加迅速、方便地管理數據。數據庫具有以下特點:
- 可以結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。
- 可以有效地保持數據信息的一致性、完整性,降低數據幾余。
- 可以滿足應用的共享和安全方面的要求。數據庫技術是計算機科學的核心技術之一,具有完備的理論基礎。對數據庫基本概念的掌握,將有助于對數據庫的理解。
二,數據庫的基本概念
1,數據
描述事物的符號記錄稱為數據(Data)。數字、文字、圖形、圖像、聲音、檔案記錄等都是數據。
在數據庫中,數據是以“記錄”的形式按照統一的格式進行存儲的,而不是雜亂無章的。相同格式和類型的數據統一存放在一起,而不會把“人”和“書”混在一起存儲。這樣,數據的存儲就能夠井然有序。
下列圖中存儲的一行數據,在數據庫中稱為一條“記錄”每條記錄中的每一個輸入項稱為“列”
編號 | 姓名 | 性別 | 年齡 | 民族 |
1 | 張三 | 男 | 21 | 漢 |
2 | 李四 | 男 | 22 | 漢 |
3 | 王五 | 男 | 23 | 回 |
2,數據庫和數據庫表
表是用來存儲具體數據的,那么數據庫和表存在什么關系呢?
簡單地說,數據庫就是表的集合。它是以一定的組織方式存儲的相互有關的數據集合。例如,關系數據庫的表由記錄組成,記錄由字段組成,字段由字符或數字組成。它可以供各種用戶共享,具有最小冗余度和較高的數據獨立性,它是統一管理的相關數據的集合。通常,數據庫并不是簡單地存儲這些數據的,還要表示它們之間的關系。例如,書和人是存在聯系的,書的作:”。這種關系也需者可能就是某個人,因此需要建立書與人的“關系要用數據庫來表示,因此關系的描述也是數據庫的一部分。
3,數據庫管理系統和數據庫系統
數據庫管理系統(Database Management System,DBMS)是實現對數據庫資源有效組織、管理和存取的系統軟件。它在操作系統的支持下,支持用戶對數據庫的各項操作。DBMS 主要包括以下功能:
- 數據庫的建立和維護功能: 包括建立數據庫的結構和數據的錄入與轉換、數據庫的 轉儲與恢復、數據庫的重組與性能監視等功能。
- 數據定義功能: 包括定義全局數據結構、局部邏輯數據結構、存儲結構、保戶密模式 及信息格式等功能。保證存儲在數據庫中的數據正確、有效和相容,以防止不合語 義的錯誤數據被輸入或輸出。
- 數據操縱功能: 包括數據查詢統計和數據更新兩個方面,數據庫的運行管理功能:這是數據庫管理系統的核心部分,包括并發控制、存取控 制、數據庫內部維護等功能。
- 通信功能: DBMS 與其他軟件系統之間的通信,如Access 能與其他 Office組件進行 數據交換。
數據庫系統:數據庫系統(Database System,DBS)是一個人-機系統,一般由硬件、操作系統、數 據庫、DBMS、應用軟件和數據庫用戶(包括數據庫管理員)組成。用戶可以通過 DBMS 操作 數據庫,也可以通過應用程序操作數據庫。應用程序是利用 DBMS 為解決某個具體的管理或數據處理的任務而編制的一系列
命令的 有序集合。如果應用程序比較完善,能夠提供友好的人機界面,并編譯成可執行文件發行,使得普通用戶不需要具備計算機的專業知識,在較短時間就學會使用,那么就稱為數據庫應 用軟件。常用的數據庫應用軟件有人事管理、財務管理、圖書管理等信息管理軟件及各類信息咨 詢系統等。
數據庫管理員(Database Administrator,DBA):負責數據庫的更新和備份、數據庫系 統的維護、用戶管理等工作,保證數據庫系統的正常運行。DBA 一般由業務水平較高、資歷 較深的人員擔任。需要注意的是數據庫、數據庫系統、數據庫管理系統,甚至數據庫表等名詞,在日常討 論中通常不嚴格區別。遇到此情況時,可以根據具體情況,判斷出實際所指的是什么。
三,主流數據庫介紹
1,SQL server數據庫
SQL Server 是微軟公司開發的關系型數據庫管理系統(RDBMS),是企業級數據管理平臺的核心組件之一。主要特點:
- 關系型數據庫:基于表格結構存儲數據,支持SQL(結構化查詢語言)
- 可擴展性:從個人使用到企業級大規模應用都能支持
- 高安全性:提供行級安全、動態數據掩碼、透明數據加密等功能
- 商業智能:集成分析服務、報表服務等BI工具
- 云集成:與Azure云服務深度集成
2,Oracle簡介
- 高性能與可擴展性:支持超大規模數據處理,適用于高并發環境
- 高可靠性:提供強大的數據保護機制,包括備份恢復、數據衛士等
- 多模型支持:除關系型數據外,還支持 JSON、XML、空間數據等
- 云就緒:全面支持云環境部署 (Oracle Cloud)
- 企業級安全:透明數據加密、數據脫敏、細粒度訪問控制
3,DB2簡介
IBM DB2 是 IBM 公司開發的一款高性能關系型數據庫管理系統(RDBMS),支持多種操作系統,廣泛應用于企業級關鍵業務系統。特點如下:
- 多平臺支持:可在 Linux、UNIX、Windows 及 IBM z/OS(大型機)上運行
- 高性能優化:支持高級查詢優化、內存計算(BLU Acceleration)
- 高可用性:提供 HADR(高可用性災難恢復)、日志復制等機制
- 混合數據支持:關系型數據 + JSON、XML、圖數據等
- 云原生支持:可在 IBM Cloud、AWS、Azure 等云平臺部署
- ?企業級安全:數據加密、行/列級訪問控制、審計日志
4,mysql簡介
MySQL 運行于 Linux 操作系統之上,Apache 和 Nginx 作為 Web 服務器,MySQL 作為后臺 數據庫,PHP/Perl/Python 作為腳本解釋器。這四款軟件都是免費或開源的,也就是說,企,業可以不花一分錢(除人工外)就能建立起一個穩定、高速的網站系統,業內稱為“LAMP”組合。因此,其以體積小、速度快、開源等特點,霸占了中小型網站相當大的市場。
四,數據庫的兩大類型
1,關系型數據庫
關系型數據庫(RDBMS, Relational Database Management System)是基于關系模型的數據庫管理系統,使用表(Table)的結構化方式存儲和管理數據。
關系數據庫使用的存儲結構是多個二維表格,在每個二維表中,每一行稱為一條記錄,用來描述一個對象的信息;每一列稱為一個字段,用來描述對象的一個屬性。數據表與數據庫之間存在相應的關聯,這些關聯用來查詢相關的數據。
關系型數據庫以表格形式存儲數據,由數據庫、表、字段、記錄、索引、視圖等基本結構組成,
- 數據庫:是關系型數據庫系統中最高層次的邏輯結構,是一個存儲數據的容器,包含了多個相關的表以及其他數據庫對象,如視圖、存儲過程等。可以將其看作是一個大型的倉庫,用于存放各種數據。
- 表:是關系型數據庫中最基本的數據存儲結構,由行和列組成,類似于電子表格。每一行代表一條記錄,每一列代表一個特定的屬性或字段。例如,一個 “學生” 表可能包含 “學號”“姓名”“年齡” 等列,每一行則對應一個具體的學生信息。
- 字段:也稱為列,是表中最小的存儲單元,用于存儲特定類型的數據。每個字段都有一個名稱和數據類型,數據類型決定了該字段可以存儲的數據種類,如整數、字符串、日期等。比如 “年齡” 字段通常定義為整數類型,“姓名” 字段定義為字符串類型。
- 記錄:也叫行,是表中的一行數據,代表一個完整的實體或對象的信息。一條記錄包含了表中各個字段的值,這些值共同描述了一個特定的事物。例如,在 “學生” 表中,一條記錄可能包含某個學生的學號、姓名、年齡等具體信息。
- 索引:是一種提高數據庫查詢效率的數據結構,它類似于書籍的目錄,可以幫助數據庫快速定位到需要查詢的數據。索引可以基于一個或多個字段創建,通過對這些字段進行排序和建立索引結構,使得數據庫在查詢時能夠更快地找到符合條件的數據,而不必全表掃描。
- 視圖:是從一個或多個表中導出的虛擬表,它并不實際存儲數據,而是根據定義的查詢語句動態地從基表中獲取數據。視圖可以看作是一種對數據進行篩選、組合和呈現的方式,它可以簡化復雜的查詢操作,為用戶提供一種更方便、更安全的數據訪問方式。
主鍵
- 定義:主鍵是表中的一個或多個字段,用于唯一地標識表中的每一行記錄。它就像是表中記錄的 “身份證號碼”,具有唯一性和非空性約束,即表中的任何兩行都不能有相同的主鍵值,且主鍵字段不能包含空值。
- 作用
- 唯一標識記錄:通過主鍵可以準確地定位和訪問表中的特定記錄,方便對數據進行查詢、更新和刪除操作。例如,在 “學生” 表中,以 “學號” 作為主鍵,就可以輕松地根據學號找到某個具體學生的信息。
- 保證數據完整性:數據庫系統會自動確保主鍵的唯一性和非空性,防止插入重復或不完整的數據,從而維護了表中數據的完整性和準確性。
外鍵
- 定義:外鍵是一個表中的字段,它與另一個表的主鍵相關聯,用于建立兩個表之間的關聯關系。外鍵的值必須匹配關聯表中主鍵的現有值,或者為 null。
- 作用
- 建立表間關系:外鍵是實現關系型數據庫中表與表之間關聯的關鍵。通過外鍵,可以將不同表中的相關數據聯系起來,從而能夠在多個表之間進行數據的關聯查詢和操作。例如,有 “學生” 表和 “課程” 表,“學生” 表中的 “專業編號” 是外鍵,與 “課程” 表中的 “專業編號” 主鍵相關聯,這樣就能通過 “專業編號” 知道某個專業的學生可以選修哪些課程。
- 保證參照完整性:外鍵約束確保了數據在不同表之間的一致性和完整性。當在有外鍵關聯的表中進行數據插入、更新或刪除操作時,數據庫會檢查外鍵值是否在關聯表的主鍵中存在,以防止出現孤立的數據,即沒有關聯到其他表中相應記錄的數據。
2,非關系型數據庫
非關系數據庫也被稱作 NoSQL(Not 0nly SQL)存儲數據不以關系模型為依據,不需要 固定的表格式。非關系型數據庫作為關系數據庫的一個補充,在日益快速發展的網站時代,發揮著高效率與高性能。
- 處理高并發讀寫:能夠應對大規模的并發讀寫請求,在處理高并發場景時表現出色,如電商促銷活動、社交媒體的實時互動等場景下,能保證系統的穩定性和響應速度。
- 存儲非結構化或半結構化數據:可以存儲各種類型的非結構化或半結構化數據,如文本、圖像、視頻、JSON 文檔等,無需像關系型數據庫那樣預先定義嚴格的表結構,非常適合處理現代應用中復雜多樣的數據格式。
- 支持靈活的數據模型:數據模型更加靈活,允許數據的動態變化和擴展。在業務需求不斷變化的情況下,無需頻繁地修改數據庫結構,降低了開發和維護成本。
- 易于橫向擴展:可以通過增加服務器節點來輕松實現橫向擴展,以處理不斷增長的數據量和業務負載。這種擴展性使得非關系型數據庫能夠適應大規模數據處理和高流量的應用場景。
3,關系型與非關系型數據庫的區別
1,數據模型:
- 關系型數據庫采用表格形式存儲數據,由行和列組成,支持 SQL 語言,通過事務處理和約束實現 ACID 特性,確保數據一致性。
- 非關系型數據庫根據不同類型有不同數據模型,如鍵值對、列存儲、文檔型和圖形等,不依賴固定表格結構,支持高并發讀寫和水平擴展,更適合處理非結構化或半結構化數據。
2,數據結構:
- 關系型數據庫中,數據以二維表形式存儲,由行和列構成,表與表之間通過外鍵關聯,結構嚴謹,適合存儲和處理結構化數據。
- 非關系型數據庫數據結構更靈活,例如鍵值存儲數據庫以鍵值對存儲,列存儲數據庫按列存儲,文檔存儲數據庫以文檔形式存儲,圖形數據庫以節點、邊和屬性的圖形結構存儲。
3,存儲方式:
- 關系型數據庫將數據存儲在硬盤等持久化存儲設備上,以頁為單位進行讀寫,支持事務處理和回滾操作,確保數據一致性,但在處理大規模數據時性能可能受限。
- 非關系型數據庫部分數據存儲在內存中,如 Redis,讀寫速度快,能處理高并發請求;部分基于分布式文件系統,如 HBase,可水平擴展,處理海量數據。
4,應用場景:
- 關系型數據庫適用于對數據一致性、事務處理要求高,數據結構固定的場景,如銀行系統、電子商務的訂單處理、企業資源規劃(ERP)系統等。
- 非關系型數據庫適用于處理非結構化或半結構化數據、高并發讀寫、對數據靈活性和擴展性要求高的場景,如社交媒體平臺、實時數據分析、內容管理系統、緩存系統等。
五:經典數據庫模型
關系模型:
- 數據結構:以二維表的形式組織數據,由行和列組成。每一行代表一條記錄,每一列代表一個屬性,不同的表之間通過外鍵建立關聯關系。
- 特點:結構簡單、清晰,易于理解和使用;支持強大的 SQL 語言,能夠方便地進行數據查詢、插入、更新和刪除操作;通過事務處理和約束機制,確保數據的一致性和完整性。
- 應用場景:廣泛應用于各種對數據一致性要求較高、數據結構相對固定的場景,如銀行系統、企業資源規劃(ERP)系統、電子商務的訂單處理等
層次模型:
- 數據結構:采用樹形結構來組織數據,節點代表實體,樹枝代表實體之間的聯系,且每個節點有且僅有一個父節點,形成一對多的關系。
- 特點:數據結構簡單,層次分明,易于實現數據的完整性約束;查詢操作通常沿著層次路徑進行,對于特定的層次查詢效率較高。
- 應用場景:適用于具有明顯層次關系的數據,如組織機構、文件系統等。但由于其結構的局限性,對于非層次結構的數據處理較為困難,且數據的插入和刪除操作可能會受到較多限制。
網狀模型:
- 數據結構:用網絡結構來表示實體及其之間的關系,節點代表實體,邊代表實體之間的聯系,一個節點可以有多個父節點,節點之間的聯系可以是多對多的關系。
- 特點:能夠更靈活地表示復雜的數據關系,克服了層次模型的一些限制;可以直接處理多對多關系,無需像層次模型那樣進行轉換。
- 應用場景:適用于描述復雜的實體關系,如交通網絡、物流配送等場景。然而,網狀模型的結構較為復雜,數據操作的復雜度也較高,對用戶和開發人員的要求相對較高。
面向對象模型:
- 數據結構:將數據和操作數據的方法封裝在對象中,對象之間通過消息傳遞進行通信。對象具有屬性和方法,屬性用于描述對象的狀態,方法用于實現對象的行為。類是對象的模板,具有相同屬性和方法的對象可以歸為一個類,類之間可以通過繼承關系實現代碼的復用。
- 特點:與面向對象的編程語言緊密結合,能夠很好地處理復雜的對象結構和行為;支持繼承、多態等面向對象的特性,提高了代碼的復用性和可維護性。
六,使用二進制安裝MySQL數據庫
1,基礎環境準備
- 安裝mysql所需依賴包
[root@localhost /]#dnf -y install gcc libaio numactl openssl ncurses-compat-libs[root@localhost /]#useradd -M -s /sbin/nologin mysql ##創建mysql用戶[root@localhost ~]# ls ##解壓用于二進制安裝的mysql軟件包
anaconda-ks.cfg mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
[root@localhost ~]# tar xvf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xzgcc ##是一套用于編譯、鏈接和創建可執行程序的工具集,libaio ##它允許應用程序在執行 I/O 操作時,不必阻塞線程等待操作完成,從而提高系統的并發性能和響應能力,numactl ##支持庫和工具集。NUMA 是一種多處理器計算機系統的內存架構,numactl 提供了一些工具和庫函數,openssl ## OpenSSL 是一個強大的開源加密庫,提供了各種加密算法、數字證書管理、SSL/TLS 協議實現等功能。ncurses-compat-libs ##一個用于在終端上創建文本用戶界面的庫,
- 關閉selinux和防火墻
[root@localhost /]#systemctl stop firewalld[root@localhost /]#systemctl disable firewalld[root@localhost /]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config[root@localhost /]#setenforce 0
2,二進制安裝Mysql
[root@localhost ~]# ls
anaconda-ks.cfg mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
mysql-8.0.36-linux-glibc2.28-x86_64
[root@localhost ~]# mv mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql ##將壓縮后的軟件包移動到/usr/local/下并重命名為mysql[root@localhost /]# mkdir /usr/local/mysql/data ##創建用于存放數據的目錄[root@localhost ~]# cd /usr/local/mysql/bin##對MySQL進行編譯安裝
[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
?
root@localhost為mysql的初始化的密碼
3,編寫配置文件
[root@localhost /]#vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock ##指定 MySQL 客戶端與服務器進行本地通信時所用的 Unix 套接字文件的路徑。
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0 ##規定 MySQL 服務器監聽的 IP 地址。0.0.0.0 表示服務器會監聽所有可用的網絡接口,
skip-name-resolve ##啟用此選項,MySQL 服務器就不會對客戶端的 IP 地址進行反向 DNS 解析。這么做可以加快連接的建立速度,
port = 3306 ##指定 MySQL 服務器監聽的 TCP/IP 端口號,默認端口是 3306
basedir=/usr/local/mysql ##指定 MySQL 服務器的安裝目錄。
datadir=/usr/local/mysql/data ##指定 MySQL 服務器存儲數據庫文件和日志文件的目錄。數據庫表、索引以及事務日志等數據都會存放在這個目錄下。
max_connections=2048 ##規定 MySQL 服務器允許的最大并發連接數。
character-set-server=utf8 ##設置 MySQL 服務器的默認字符集為 utf8。
default-storage-engine=INNODB ##定 MySQL 服務器創建新表時默認使用的存儲引擎為 InnoDB。InnoDB 是 MySQL 中常用的存儲引擎,它支持事務、外鍵約束等特性。
max_allowed_packet=16M ##規定 MySQL 服務器接收的最大數據包大小。
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log ##指定 MySQL 服務器錯誤日志文件的路徑。[root@localhost /]# ln -s /usr/local/mysql/bin/* /usr/local/bin ##為mysql數據庫創建軟鏈接
4,配置systemctl方式啟動
[root@localhost /]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld[root@localhost /]#vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld ##對該服務的簡短描述
After=network.target ##指定了該服務啟動的依賴條件,即該服務需要在 network.target 啟動之后才能啟動。
[Service]
Type=forking ##指定服務的啟動類型。forking 表示該服務在啟動時會通過 fork() 系統調用創建子進程,父進程會在子進程啟動后退出。
ExecStart=/etc/init.d/mysqld start ##指定啟動服務時執行的命令。
ExecReload=/etc/init.d/mysqld restart ##指定重新加載服務配置時執行的命令。
ExecStop=/etc/init.d/mysqld stop ##指定停止服務時執行的命令。
PrivateTmp=true ##如果設置為 true,表示為該服務創建一個獨立的臨時文件系統(/tmp 和 /var/tmp),
[Install]
WantedBy=multi-user.target ##指定服務的目標單元。multi-user.target 代表多用戶模式,將服務配置為被 multi-user.target 需要,[root@localhost ~]# systemctl daemon-reload ##重載守護進程[root@localhost ~]# systemctl start mysqld ##啟動mysql數據庫
[root@localhost ~]# netstat -anpt |grep mysqld ##查看mysql監聽的端口號
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5754/mysqld
tcp6 0 0 :::33060 :::* LISTEN 5754/mysqld
5,訪問mysql數據庫并修改密碼
[root@localhost ~]# mysql -uroot -p
Enter password: ##輸入初始化后的密碼登陸到數據庫##進入到數據庫中修改root用戶的登陸密碼為pwd123
alter user 'root'@'localhost' identified with mysql_native_password by 'pwd123';[root@localhost ~]# mysql -uroot -ppwd123 ##使用新密碼登陸數據庫