数据库简介与 Mysql 服务基础
文章目錄
- 前言
- 一、數據庫系統發展史
- 二、數據庫基本概念
- 三、主流數據庫介紹
- 四、數據庫類型
- 1. 關系型數據庫
- 2. 非關系型數據庫
- 3. 時序數據庫 TSD
- 五、Mysql 數據庫
- 1. MySQL 簡介
- 2. 商業版與社區版
- 3. 產品陣營
- 4. Mysql 特點
- 5. 源碼編譯安裝
- 6. Mysql 初步使用
- (1) MySQL 常用數據類型
- (2) 查看當前服務器中的數據庫
- (3) 查看數據庫中包含的表
- (4) 查看表的結構
- (4) 創建新的數據庫
- (5) 創建新的表
- (6) 刪除指定的數據表
- (7) 刪除指定的數據庫
前言
一、數據庫系統發展史
第一代數據庫
- 自 20 世紀 60 年代起,第一代數據庫系統問世
- 是層次模型與網狀模型的數據庫系統
- 為統—管理和共享數據提供了有力的支撐
第二代數據庫
- 20 世紀 70 年代初,第二代數據庫——關系型數據庫開始出現
- 20 世紀 80 年代初,IBM 公司的關系型數據庫系統 DB2 問世,開始逐步取代層次與網狀模型的數據庫,成為行業主流
- 到目前為止,關系型數據庫系統仍占領數據庫應用的主要地位
第三代數據庫
- 自 20 世紀 80 年代開始,適應不同領域的新型數據庫系統不斷涌現
- 面向對象的數據庫系統,實用性強、適應面廣
- 20 世紀 90 年代后期,形成了多種數據庫系統共同支撐應用的局面
- —些新的元素被添加進主流數據庫系統中
例如:Oracle 支持的 < 關系 - 對象 > 數據庫模型
二、數據庫基本概念
數據(data)
- 描述事物的符號記錄
- 包括數字,文字、圖形、圖像、聲音、檔案記錄等
- 如下表所示:每一行稱為一條記錄,用來描述一個對象的信息;每一列稱為一個字段,用來描述對象的一個屬性
| 小紅 | 19 | 2000 |
| 小劉 | 20 | 5000 |
表(table)
- 將不同的記錄組織在一起用來存儲具體數據
數據庫(database)
- 表的集合,是存儲數據的倉庫
- 以一定的組織方式存儲的相互有關的數據集合
數據庫管理系統(DBMS)
??數據庫管理系統(DatabaseManagementSystem,DBMS)是實現對數據庫資源有效組織、管理和存取的系統軟件。它在操作系統的支持下,支持用戶對數據庫的各項操作。
DBMS 的工作模式如下
DBMS主要包括以下功能
數據庫的建立和維護功能:包括建立數據庫的結構和數據的錄入與轉換、數據庫的 轉儲與恢復、數據庫的重組與性能監視等功能。 數據定義功能:包括定義全局數據結構、局部邏輯數據結構、存儲結構、保密模式及信息格式等功能。保證存儲在數據庫中的數據正確、有效和相容,以防止不合語義的錯誤數據被輸入或輸出。 數據操縱功能:包括數據查詢統計和數據更新兩個方面。 數據庫的運行管理功能:這是數據庫管理系統的核心部分,包括并發控制、存取控 制、數據庫內部維護等功能。 通信功能:DBMS 與其他軟件系統之間的通信,如 Access 能與其他 Office 組件進行數據交換。數據庫系統(DBS)
- 是一個人機系統,由硬件、OS、數據庫、DBMS、應用軟件和數據庫用戶組成
- 用戶可以通過 DBMS 或應用程序操作數據庫
三、主流數據庫介紹
SQL Server(微軟公司產品)
- 面向 Windows 操作系統
- 簡單、易用
Oracle(甲骨文公司產品)
- 面向所有主流平臺
- 安全、完善,操作復雜
DB2(IBM 公司產品)
- 面向所有主流平臺
- 大型、安全、完善
MySQL(甲骨文公司收購)
- 免費、開源、體積小
PostgreSQL(PostgreSQL Global Development Group維護)
- 面向所有主流平臺
- 免費、開源、功能強大
GaussDB(華為公司產品)
- 涵蓋關系型、非關系型數據庫服務
- 可靠性、擴展性、備份恢復
OceanBase(螞蟻集團產品)
- 金融級分布式關系數據庫
- 數據強一致、高可用、高性能、在線擴展、高度兼容 SQL 標準和主流關系數據庫、低成本
四、數據庫類型
1. 關系型數據庫
關系型數據庫是基于關系模型的數據庫系統
關系模型的數據結構使用簡單易懂的二維數據表
關系模型可用簡單的 “實體 - 關系”(E - R) 圖來表示
E - R 圖中包含了實體(數據對象)、關系和屬性三個要素
所有實體及實體之間聯系的集合構成了一個關系數據庫
實體
- 也稱為實例,對應現實世界中可區別于其他對象的 “事件” 或 “事務”
- 如上圖的銀行客戶、銀行賬戶
屬性
- 實體所具有的某一特性,一個實體可以有多個屬性
- 如上圖的 “銀行客戶” 實體集中的每個實體均具有姓名、住址、電話等屬性
聯系
- 實體集之間的對應關系稱為聯系,也稱為關系
- 如銀行客戶和銀行賬戶之間存在 “儲蓄” 的關系
二維數據表
關系數據庫的存儲結構是二維表格
在每個二維表中:
- 每一行稱為一條記錄,用來描述一個對象的信息
- 每一列稱為一個字段,用來描述對象的一個屬性
主鍵
- 數據表中的每行記錄都必須是唯一的,不允許出現完全相同的記錄,通過定義主鍵(主關鍵字,Promary Key)可以保證記錄(實體)的唯一性
- 鍵,即關鍵字,它是關系模型中一個非常重要的元素
- 主鍵唯一標識表中的行數據,一個主鍵值對應一行數據,主鍵由一個或多個字段組成,其值具有唯一性,不允許取空值(NULL)
- 一個表只能有一個主鍵
- 如果一個屬性集能唯一地標識表的一行而又不含有多余的屬性,那么這個屬性集稱為候選鍵
- 表中可以有多個候選鍵,但是只能有一個候選鍵可以選做表的主鍵,所有其他候選鍵稱為備用鍵
- 例如下圖,“編號”、“姓名”、“性別”、“年齡”、“專業編號” 都可以說是候選鍵,而可以定義 “編號” 為主鍵
| 1 | 徐一 | 男 | 21 | 1 |
| 2 | 徐二 | 男 | 22 | 3 |
| 3 | 徐三 | 男 | 18 | 3 |
| 4 | 徐四 | 女 | 18 | 5 |
外鍵
- 一個關系數據庫通常包括多個表,通過外鍵(Foreign Key)可以使這些表關聯起來
- 外鍵是用于建立和加強兩個表數據之間的鏈接的一列或多列,通過表中主鍵值得一列或多列添加到另一個表中,可創建兩個表之間的鏈接,這個列就稱為第二個表的外鍵
- 如下表所示,字段 “專業編號” 是該表的主鍵,而上表中也有一個相同的字段 “專業編號”,則該字段稱為外鍵
| 1 | 云計算運維 |
| 3 | 大數據開發 |
| 5 | 人工智能 |
- 主鍵的表稱之為 “主表”,外鍵的表稱之為 "從表”
- 主表和從表總是成對出現的,相互之間以 “外鍵” 形成關聯
數據完整性規則
為了維護數據庫中的數據與現實世界的一致性,關系數據庫的數據與更新操作必須遵循下列四類完整性規則
- 實體完整性規則
- 域完整性規則
- 引用完整性規則
- 用戶定義的完整性規則
數據完整性
關系型數據庫的應用
| Oracle、MySQL | 12306 用戶信息系統 |
| SQL Server、Sybase | 淘寶賬號系統 |
| Informix、access | 聯通手機號信息系統 |
| DB2、FoxPRO | 銀行用戶賬號系統 |
| PostgreSQL | 網站用戶信息系統 |
2. 非關系型數據庫
簡介
- 非關系數據庫也被稱為 NoSQL(Not Only SQL)
- 存儲數據不以關系模型為依據,不需要固定的表格式
- 常用的非關系數據庫有:Redis、mongoDB 等
非關系數據庫的優點
- 數據庫可高并發讀寫
- 對海量數據高效率存儲與訪問
- 數據庫具有高擴展性與高可用性
對比關系型數據庫
優勢
- 成本:nosql 數據庫簡單易部署,基本都是開源軟件,不需要像使用 oracle 那樣花費大量成本購買使用,相比關系型數據庫價格便宜
- 查詢速度:nosql 數據庫將數據存儲于緩存之中,關系型數據庫將數據存儲在硬盤中,自然查詢速度遠不及 nosql 數據庫
- 存儲數據的格式:nosql 的存儲格式是 key-value 形式、文檔形式、圖片形式等等,所以可以存儲基礎類型以及對象是集合等各種格式,而關系型數據庫則只支持基礎類型
- 擴展性:關系型數據庫有類似 join 這樣的多表查詢機制的限制導致擴展很難
劣勢
- 維護的工具和資料有限,因為 nosql 是屬于新的技術,而關系型數據庫出現已有十幾年時間
- 不提供對 sql 語句的支持,如果不支持 sql 這樣的工業標準,將產生一定程度的學習和使用成本
- 不提供關系型數據庫對事物的處理
3. 時序數據庫 TSD
??基于時間序列數據的特點,關系型數據庫無法滿足對時間序列數據的有效存儲與處理,因此迫切需要一種專門針對時間序列數據來做優化的數據庫系統,即時間序列數據庫。
??時序數據庫全稱為時間序列數據庫。時間序列數據庫指主要用于處理帶時間標簽(按照時間的順序變化,即時間序列化)的數據,帶時間標簽的數據也稱為時間序列數據。
五、Mysql 數據庫
1. MySQL 簡介
- MySQL 是一個真正的多線程、多用戶的 SQL 數據庫服務,憑借其高性能、高可靠和易于使用的特點,成為服務器領域中最受歡迎的開源數據庫系統
- 在 2008 年以前,MySQL 項目由 MySQL AB 公司進行開發、發布和支持,之后歷經 Sun 公司收購 MySQL,Oracle 公司收購 Sun 公司的過程,目前 MySQL 項目由 Oracle 公司負責運營和維護
2. 商業版與社區版
- MySQL 商業版是由 MySQL AB 公司負責開發與維護,需要付費才能使用
- MySQL 社區版是由分散在世界各地的 MySQL 開發者、愛好者一起開發與維護,可以免費使用
- 兩者區別
- 商業版組織管理與測試環節更加嚴格,會比社區版更穩定
- 商業版不遵守 GPL,社區版遵從 GPL 可以免費使用
- 商業版可獲得 7*24 小時的服務,社區版則沒有
3. 產品陣營
- 第一陣營:5.0-5.1 陣營,可說是早期產品的延續
- 第二陣營:5.4-5.7 陣營,整合了 MySQL AB 公司、社區和第三方公司開發的存儲引擎,從而提高性能
- 第三陣營:6.0-7.1 陣營,就是 MySQL Cluster 版本,為適應新時代對數據庫的集群需求而開發
4. Mysql 特點
- 性能卓越、服務穩定
- 開源、無版權限制、成本低
- 多線程、多用戶
- 基于 C/S 架構
- 安全可靠
5. 源碼編譯安裝
這里使用腳本一鍵執行,安裝包放在我的云主機上
#!/bin/bash #一鍵安裝 mysql-5.7.17 #聯網下載兩個源碼包,包在我的云主機上 #安裝包下載在 /data 目錄 #編譯安裝需較長時間,請耐心等待mkdir /data wget http://101.34.22.188/mysql-5.7.17/boost_1_59_0.tar.gz -P /data wget http://101.34.22.188/mysql-5.7.17/mysql-5.7.17.tar.gz -P /datasystemctl stop firewalld && systemctl disable firewalld setenforce 0 ntpdate ntp1.aliyun.com tar zxvf /data/mysql-5.7.17.tar.gz -C /opt tar zxvf /data/boost_1_59_0.tar.gz -C /usr/local mv /usr/local/boost_1_59_0 /usr/local/boost yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make git perl expat-devel pcre-devel pcre useradd -s /sbin/nologin mysql cd /opt/mysql-5.7.17/cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=/usr/local/boost \ -DWITH_SYSTEMD=1cd /opt/mysql-5.7.17/ make -j 4 && make install echo > /etc/my.cnfcat > /etc/my.cnf<<EOF [client] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock[mysql] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock auto-rehash[mysqld] user = mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data port = 3306 character-set-server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket=/usr/local/mysql/mysql.sock bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M server-id = 1sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES EOFchown -R mysql.mysql /usr/local/mysql/ chown mysql.mysql /etc/my.cnf echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile echo 'export PATH' >> /etc/profile source /etc/profilecd /usr/local/mysql/bin/ ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/datacp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload && systemctl start mysqld && systemctl enable mysqld ln -s /usr/local/mysql/bin/mysql /usr/local/sbin/pgrep "mysqld" &> /dev/null if [ $? -eq 0 ];thenecho -e "\033[32mmysqld服務運行正常\033[0m" elseecho -e "\033[31mmysqld服務運行異常,請檢查\033[0m" fi sleep 2 echo ' ' echo -e "\033[32mMySQL 沒有設置密碼,執行 mysql 命令登錄\033[0m"修改密碼
mysqladmin -u root -p password "123456" # 不需要登錄,直接敲回車授權遠程登錄
# 需要登錄 grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;6. Mysql 初步使用
數據庫 ----> 數據表 -----> 行(記錄):用來描述一個對象的信息 數據庫 ----> 數據表 -----> 列(字段):用來描述對象的一個屬性(1) MySQL 常用數據類型
mysql 常用數據類型很多,這里列舉幾種:
int:整型 float:單精度浮點 4 字節 32 位 double:雙精度浮點 8 字節 64 位 char:固定長度的字符類型 varchar:可變長度的字符類型 text:文本 image:圖片 decimal(5,2): 5 個有效長度數字,小數點后面有 2 位MySQL 數據類型
(2) 查看當前服務器中的數據庫
show databases;(3) 查看數據庫中包含的表
use <數據庫名>; #切換數據庫 show tables; #查看所有表 #可以合寫 show tables in <數據庫名>;
??MySQL 數據庫的數據文件存放在 /usr/local/mysql/data 目錄下,每個數據庫對應一個子目錄,用于存儲數據表文件。每個數據表對應為三個文件,擴展名分別為:
(4) 查看表的結構
use <數據庫名>; describe <數據庫名>.<表名>; #describe 可縮寫 desc <表名>;(4) 創建新的數據庫
create database <數據庫名>;(5) 創建新的表
- create table 表名 (字段1 數據類型,字段2 數據類型,[…],parmary key (主鍵名));
- 主鍵一般選擇能代表唯一性的字段,不允許取空值(NULL),一個表只能有一個主鍵
(6) 刪除指定的數據表
drop table <數據庫名>.<表名>; #不 use 進入庫中需加上數據庫名(7) 刪除指定的數據庫
drop database <數據庫名>;總結
以上是生活随笔為你收集整理的数据库简介与 Mysql 服务基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 认知升级|系列2|复利思维
- 下一篇: substance painter中的粒