數據庫基礎
- 1、安裝MySQL
- 2、什么是數據庫
- 3、數據庫使用案例
- 4、MySQL架構與SQL分類
- 5、存儲引擎
1、安裝MySQL
1、更新軟件包列表
sudo apt update
2、查看MySQL安裝包
apt list | grep mysql-server
3、安裝MySQL
# 默認安裝最新版
sudo apt install -y mysql-server
4、啟動MySQL
安裝成功后我們需要啟動mysql服務
sudo systemctl start mysql
然后我們查看一下是否存在一個mysqld的進程:
5、配置mysqld.cnf文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
提權使用vim打開該文件進行配置,在文件最后加入以下內容:
skip-grant-tables
character-set-server=utf8
default-storage-engine=innodb
第一行配置表示配置root免密碼登錄,我們后面會設置密碼。第二行配置編碼為utf8。第三行設置默認存儲引擎為innodb。
配置好后保存退出,然后使用以下命令重啟mysql服務。
sudo systemctl restart mysql
6、訪問數據庫服務
-h指明登錄部署了mysql服務的主機,實際上mysql是一個網絡服務。-P指明要訪問的端口號。-u指明登錄用戶。-p指明需要輸入密碼。然后我們直接回車就會發現登錄失敗,這是因為上面配置了免密碼登錄導致mysql并沒有成網絡服務,我們使用netstat -tnlp是看不到端口號為3306的網絡服務的,這個我們后面用戶管理設置了密碼再將配置的免密碼登錄刪掉。
我們直接使用mysql -uroot -p登錄,不需要輸入密碼直接回車即可。如果要退出輸入quit即可。
2、什么是數據庫
1、mysql是數據庫服務的客戶端。
2、mysqld是數據庫服務的服務端。
3、mysql本質上是基于C(mysql) S(mysqld)模式的一種網絡服務。
mysql是一套給我提供數據存儲服務的網絡程序。
數據庫一般指的是,在磁盤或者內存中存儲的特定結構組織的數據——將來在磁盤上存儲的一套數據庫方案。數據庫服務——mysqld。
存儲數據用文件就可以了,為什么還要弄個數據庫?
文件保存數據有以下幾個缺點:文件的安全性問題、文件不利于數據查詢和管理、文件不利于存儲海量數據、文件在程序中控制不方便。數據庫存儲介質:磁盤、內存。
數據庫本質:對數據內容存儲的一套解決方案,你給我字段或者要求,我直接給你結果。
如圖,原來我們用戶是直接和磁盤上的文件打交道的,現在我們通過mysql客戶端訪問服務器上的mysqld服務端,然后服務端將SQL進行分析然后去操作磁盤上的數據庫文件,獲取到結果后再將結果返回給mysql客戶端。
主流數據庫:
SQL Sever: 微軟的產品,.Net程序員的最愛,中大型項目。
Oracle: 甲骨文產品,適合大型項目,復雜的業務邏輯,并發一般來說不如MySQL。
MySQL:世界上最受歡迎的數據庫,屬于甲骨文,并發性好,不適合做復雜的業務。主要用在電商,SNS,論壇。對簡單的SQL處理效果好。
PostgreSQL :加州大學伯克利分校計算機系開發的關系型數據庫,不管是私用,商用,還是學術研究使用,可以免費使用,修改和分發。
SQLite: 是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。
H2: 是一個用Java開發的嵌入式數據庫,它本身只是一個類庫,可以直接嵌入到應用項目中。
服務器,數據庫,表關系:
所謂安裝數據庫服務器,只是在機器上安裝了一個數據庫管理系統程序,這個管理程序可以管理多個數據庫,一般開發人員會針對每一個應用創建一個數據庫。為保存應用中實體的數據,一般會在數據庫中創建多個表,以保存程序中實體的數據。數據庫服務器、數據庫和表的關系如下:
3、數據庫使用案例
樣例:使用mysql建立一個數據庫,建立一張表結構,插入一些數據。看看數據庫在Linux中是如何表現的。
1、首先登錄數據庫:mysql -uroot -p
2、查看所有數據庫:show databases;
登入root賬戶,或者使用sudo提權,查看/var/lib/mysql下的文件,對比左邊的數據庫,我們發現數據庫本質上就是在Linux下的一個目錄。
3、創建一個數據庫:create database helloworld;
建立數據庫,本質上就是在Linux下創建一個目錄。
4、使用數據庫,相當于進入該目錄:use helloworld;
5、創建數據庫表
創建數據庫表的語法如圖左側,首先是列的名稱,然后是屬性,多個列以逗號分隔開。創建后進入該數據庫目錄下可以看到多了一個student.ibd的文件。
6、插入數據
使用insert into 表名,向數據庫的某個表插入數據。
7、查詢表中數據
如圖,查詢的數據信息是邏輯存儲結構。
4、MySQL架構與SQL分類
MySQL是一個可移植的數據庫,幾乎能在當前所有的操作系統上運行,如Unix/Linux、Windows、Mac和Solaris。各種系統在底層實現方面各有不同,但是 MySQL 基本上能保證在各個平臺上的物理體系結構的一致性。
首先mysql服務端的最上面是一個連接池,進行連接管理和安全驗證的。然后連接池下面就是用來進行SQL語法分析解析優化的,然后將它們交給再下一次的存儲引擎,存儲引擎再去操作磁盤上的文件。不同的存儲引擎適用于不同類型的存儲數據。
SQL分類:
DDL[data definition language]數據定義語言,用來維護存儲數據的結構。代表指令:create,drop,alter。
DML[data manipulation language]數據操縱語言,用來對數據進行操作。代表指令:insert,delete,update。
DML中又單獨分了一個DQL,數據查詢語言,代表指令:select。
DCL[Data Control Language]數據控制語言,主要負責權限管理和事務。代表指令:grant,revoke,commit。
5、存儲引擎
存儲引擎是:數據庫管理系統如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。
MySQL的核心就是插件式存儲引擎,支持多種存儲引擎。
使用show engines \G可以查看當前數據庫支持的存儲引擎。或者使用show engines。
雖然存儲引擎這么多,但是我們主要使用的還是InnoDB和MyISAM這兩種存儲引擎。我們在最初配置的存儲引擎也是InnoDB。