六合哪家做網(wǎng)站建設(shè)靈寶seo公司
🌎初識MySQL
注:本文SQL語句只為了驗(yàn)證猜想,不會(huì)也不要緊。
文章目錄:
MySql開端
????認(rèn)識數(shù)據(jù)庫
??????什么是數(shù)據(jù)庫
??????主流數(shù)據(jù)庫
??????MySQL的本質(zhì)
????MySQL基礎(chǔ)使用
??????連接mysql服務(wù)器
??????MySQL與文件的關(guān)系
??????服務(wù)器管理
??????服務(wù)器、數(shù)據(jù)庫和表關(guān)系
????MySQL架構(gòu)
????SQL語句分類
前言:
??MySQL是地表最受歡迎開源的數(shù)據(jù)庫管理系統(tǒng)之一,也作為程序員水平的技術(shù)之一。今天我們就開始全新的話題!
🚀認(rèn)識數(shù)據(jù)庫
??什么是數(shù)據(jù)庫
存儲(chǔ)數(shù)據(jù)用文件就可以了,為什么還要弄個(gè)數(shù)據(jù)庫?
文件保存數(shù)據(jù)有以下幾個(gè) 缺點(diǎn):
- ?文件的安全性問題
- ?文件不利于數(shù)據(jù)查詢和管理
- ?文件不利于存儲(chǔ)海量數(shù)據(jù)
- ?文件在程序中控制不方便
數(shù)據(jù)庫存儲(chǔ)介質(zhì):
- ?磁盤
- ?內(nèi)存
??為了解決上述問題,專家們設(shè)計(jì)出 更加利于管理數(shù)據(jù)的東西——數(shù)據(jù)庫,它能更有效的管理數(shù)據(jù)。數(shù)據(jù)庫的水平是衡量一個(gè)程序員水平的重要指標(biāo)。
??主流數(shù)據(jù)庫
- SQL Sever: 微軟的產(chǎn)品,.Net程序員的最愛,中大型項(xiàng)目。
- Oracle: 甲骨文產(chǎn)品,適合大型項(xiàng)目,復(fù)雜的業(yè)務(wù)邏輯,并發(fā)一般來說不如MySQL。
- MySQL:世界上最受歡迎的數(shù)據(jù)庫,屬于甲骨文,并發(fā)性好,不適合做復(fù)雜的業(yè)務(wù)。主要用在電商,SNS,論壇。對簡單的SQL處理效果好。
- PostgreSQL:加州大學(xué)伯克利分校計(jì)算機(jī)系開發(fā)的關(guān)系型數(shù)據(jù)庫,不管是私用,商用,還是學(xué)術(shù)研究使用,可以免費(fèi)使用,修改和分發(fā)。
- SQLite: 是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個(gè)相對小的C庫中。它的設(shè)計(jì)目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。
- H2: 是一個(gè)用Java開發(fā)的嵌入式數(shù)據(jù)庫,它本身只是一個(gè)類庫,可以直接嵌入到應(yīng)用項(xiàng)目中。
??MySQL的本質(zhì)
??MySQL事實(shí)上是一種網(wǎng)絡(luò)服務(wù),我們使用的是Linux下的mysql服務(wù),在Linux下使用grep命令可以查看:
??其中,mysql是數(shù)據(jù)庫服務(wù)的客戶端,mysqld是數(shù)據(jù)庫服務(wù)的服務(wù)器端,而mysql的本質(zhì),基于 C(mysql) S(mysqld) 模式的一種網(wǎng)絡(luò)服務(wù)。
??而mysql作為一種網(wǎng)絡(luò)服務(wù),在Linux下,我們就一定能使用如下命令來監(jiān)測出mysql的網(wǎng)絡(luò)服務(wù):
netstat -lntp
??話雖如此,但mysql可不僅僅是一套服務(wù),它還是一套給用戶提供數(shù)據(jù)存取服務(wù)的網(wǎng)絡(luò)程序??梢栽诜?wù)端對數(shù)據(jù)進(jìn)行保存。
??而我們口頭所說的 “數(shù)據(jù)庫”一般指的是,在磁盤或內(nèi)存中存儲(chǔ)存儲(chǔ)特定結(jié)構(gòu)組織的數(shù)據(jù),也就是在磁盤上存儲(chǔ)的一套數(shù)據(jù)庫方案。
🚀MySQL基礎(chǔ)使用
??連接mysql服務(wù)器
??不論在Linux下還是Windows下連接MySQL都需要先下載MySQL服務(wù)器。在MySQL中,我們使用如下命令連接MySQL:
mysql -P 3306 -h 127.0.0.1 -u root -p
??其中各個(gè)選項(xiàng)的含義如下:
- ?-P選項(xiàng):表示mysql端口號,通常為3306。不帶此選項(xiàng)默認(rèn)為3306端口
- ?-h選項(xiàng):表示要連接mysql主機(jī),本機(jī)為127.0.0.1。不帶這個(gè)選項(xiàng)默認(rèn)是本機(jī)連接
- ?-u選項(xiàng):表示哪個(gè)用戶登錄mysql。
- ?-p選項(xiàng):password,表示用戶登錄密碼。
- ?root用戶:表示以root的身份登錄mysql。
??當(dāng)看到此頁面時(shí),就表示你已經(jīng)登錄MySQL成功了,進(jìn)入到MySQL中想退出怎么辦呢?輸入 quit;
再回車即可退出MySQL:
??MySQL與文件的關(guān)系
??首先,在MySQL中存在一個(gè)個(gè)的庫,而我們想要查看這些庫,可以使用如下SQL命令:
SHOW DATABASES;--大小寫隨意--
??我們發(fā)現(xiàn)MySQL中默認(rèn)存在四個(gè)庫、那么這四個(gè)庫存儲(chǔ)在系統(tǒng)的哪個(gè)位置呢?通常在MySQL中/etc目錄下的配置文件中查看:
cat /etc/mysql/mysql.conf.d/mysqld.cnf #很多不確定性因素,你的可能和我的配置文件不同
??而在該文件下,一般都會(huì)保存一個(gè)名為 datadir 的目錄,是用來保存SQL服務(wù)所對應(yīng)的數(shù)據(jù):
??我們進(jìn)入到所保存的目錄,為了驗(yàn)證以上說法,我們首先創(chuàng)建一個(gè)數(shù)據(jù)庫,使用如下SQL指令:
CREATE DATABASE helloMySQL;--創(chuàng)建名為helloMySQL的數(shù)據(jù)庫--
??我們發(fā)現(xiàn)確實(shí)如此,當(dāng)然不僅如此,細(xì)心的小伙伴已經(jīng)發(fā)現(xiàn)別的端倪了。而我們查看剛剛創(chuàng)建的這個(gè)目錄:
??我們發(fā)現(xiàn)這里什么都沒有,當(dāng)然你的可能會(huì)有 dp.opt 默認(rèn)配置文件。所以由此我們可以得出結(jié)論:所謂建立數(shù)據(jù)庫,本質(zhì)就是在Linux下創(chuàng)建一個(gè)目錄文件!
??而我們關(guān)系型數(shù)據(jù)庫也得有表來展示,我們不妨使用如下SQL語句創(chuàng)建一張數(shù)據(jù)表:
USE helloMySQL;--使用具體的數(shù)據(jù)庫--
CREATE TABLE student(id int,name varchar(32),gender varchar(2)
);
??這樣我們的表就創(chuàng)建成功了。而這個(gè)時(shí)候我們在Linux下對該目錄進(jìn)行查看時(shí):
??此時(shí)在該目錄下就多了一個(gè)后綴為 .ibd 的文件了。創(chuàng)建完表當(dāng)然要對表插入數(shù)據(jù),我們使用如下的SQL語句對該表進(jìn)行插入:
insert into student (id, name, gender) values (1, '張三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
??這樣就插入成功了,我們使用如下SQL語句查看剛插入的表結(jié)構(gòu):
select * from student;
??而我們輸入這些SQL語句才完成了這樣的工作,那么這個(gè)工作真的是我們完成的嗎?實(shí)際上 這個(gè)工作是由mysqld來完成的!我們只是給它發(fā)了指令而已!他們的關(guān)系如下:
??服務(wù)器管理
??如果你是 windows 下的MySQL用戶,我們可以通過 win + r
并輸入 services.msc
快速打開文件夾模式來 停用或者暫停 MySQL服務(wù):
??服務(wù)器、數(shù)據(jù)庫和表關(guān)系
- ?所謂安裝數(shù)據(jù)庫服務(wù)器,只是在機(jī)器上安裝了一個(gè)數(shù)據(jù)庫管理系統(tǒng)程序,這個(gè)管理程序可以管理多個(gè)數(shù)據(jù)庫,一般開發(fā)人員會(huì)針對每一個(gè)應(yīng)用創(chuàng)建一個(gè)數(shù)據(jù)庫。
- ?為保存應(yīng)用中實(shí)體的數(shù)據(jù),一般會(huì)在數(shù)據(jù)庫中創(chuàng)建多個(gè)表,以保存程序中實(shí)體的數(shù)據(jù)。
??而數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)庫和表的關(guān)系如下:
??準(zhǔn)確來說,Client實(shí)際上是mysql,MySQL實(shí)際上是mysqld,后面的內(nèi)容俗稱 “數(shù)據(jù)庫”,而各個(gè)表其實(shí)就是普通的文件,只不過表的文件是以二進(jìn)制形式存儲(chǔ)的。
🚀MySQL架構(gòu)
??MySQL 是一個(gè)可移植的數(shù)據(jù)庫,幾乎能在當(dāng)前所有的操作系統(tǒng)上運(yùn)行,如Unix/Linux、Windows、Mac 和 Solaris。各種系統(tǒng)在底層實(shí)現(xiàn)方面各有不同,但是 MySQL 基本上能保證在各個(gè)平臺(tái)上的物理體系結(jié)構(gòu)的一致性。
??雖然上面劃分了四層結(jié)構(gòu),但是對于整體的MySQL Serve來說,主要功能由前三層來構(gòu)成。
-
?鏈接池(Connection Pool):其作用是幫助用戶做網(wǎng)絡(luò)管理、幫助用戶做鑒權(quán)和保證一些安全方面的策略。
-
?中間層:處理下達(dá)的一些SQL指令,而MySQL要對下達(dá)的SQL語句做詞法分析、語法分析、甚至對SQL查詢進(jìn)行優(yōu)化,隨后按照SQL的協(xié)議將SQL傳入下一層。
-
?可插拔存儲(chǔ)引擎(Pluggable Storage Engines):底層的存儲(chǔ)引擎將上層經(jīng)過處理的SQL語句,對其進(jìn)行解釋工作。訪問指定數(shù)據(jù)庫、訪問指定文件、表結(jié)構(gòu)等,對數(shù)據(jù)進(jìn)行增刪查改。
??存儲(chǔ)引擎是:數(shù)據(jù)庫管理系統(tǒng)如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。MySQL的核心就是插件式存儲(chǔ)引擎,支持多種存儲(chǔ)引擎。
我們可以使用如下SQL指令查看存儲(chǔ)引擎:
SHOW ENGINES;
以下是一些存儲(chǔ)引擎的對比:
🚀SQL語句分類
- ?DDL[data definition language] : 數(shù)據(jù)定義語言,用來維護(hù)存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)代表指令: create, drop, alter
- ?DML[data manipulation language]: 數(shù)據(jù)操縱語言,用來對數(shù)據(jù)進(jìn)行操作代表指令: insert,delete,update
- ?數(shù)據(jù)查詢語言:為DML中單獨(dú)分了一個(gè)DQL,代表指令: select
- ?DCL[Data Control Language]: 數(shù)據(jù)控制語言,主要負(fù)責(zé)權(quán)限管理和事務(wù)代表指令: grant,revoke,commit
??今天的內(nèi)容到這里就結(jié)束啦,如果這篇文章對您有幫助的話,還望給點(diǎn)個(gè)小贊~~