前提背景
MySQL關(guān)是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng),所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用的標(biāo)準(zhǔn)化語言,其特點(diǎn)為體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),在 Web應(yīng)用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。
本文主要講述壓縮版,因?yàn)榘惭b不太方便,但是功能效果都是一樣的!
- 訪問地址:MySQL官網(wǎng)
- 下載地址:MySQL下載
MySQL8的介紹說明
MySQL 8.0是全球最受歡迎的開源數(shù)據(jù)庫的一個(gè)非常令人興奮的新版本,全面改進(jìn)。一些關(guān)鍵的增強(qiáng)包括:
MySQL8的特性介紹
SQL窗口函數(shù),公用表表達(dá)式,NOWAIT和SKIP LOCKED,降序索引,分組,正則表達(dá)式,字符集,成本模型和直方圖。
JSON擴(kuò)展語法,新功能,改進(jìn)排序和部分更新。使用JSON表函數(shù),您可以使用JSON數(shù)據(jù)的SQL機(jī)制。
GIS地理支持??臻g參考系統(tǒng)(SRS),以及SRS感知空間數(shù)據(jù)類型,空間索引和空間功能。
可靠性 DDL語句已變得原子性和崩潰安全,元數(shù)據(jù)存儲(chǔ)在單個(gè)事務(wù)數(shù)據(jù)字典中。由InnoDB提供支持!
可觀察性性能架構(gòu),信息架構(gòu),配置變量和錯(cuò)誤記錄的顯著增強(qiáng)。
可管理性遠(yuǎn)程管理,撤消表空間管理和新的即時(shí)DDL。
安全 OpenSSL改進(jìn),新的默認(rèn)身份驗(yàn)證,SQL角色,分解超級(jí)特權(quán),密碼強(qiáng)度等等。
性能 InnoDB在讀/寫工作負(fù)載,IO綁定工作負(fù)載和高爭(zhēng)用“熱點(diǎn)”工作負(fù)載方面明顯更好。
增加了資源組功能,通過將用戶線程映射到CPU,為用戶提供一個(gè)選項(xiàng),以針對(duì)特定硬件上的特定工作負(fù)載進(jìn)行優(yōu)化
開發(fā)者需要了解的特性!
MySQL開發(fā)人員需要新功能,而MySQL 8.0在諸如SQL,JSON,正則表達(dá)式和GIS等領(lǐng)域提供了許多新的和更多需求的功能。開發(fā)人員也希望能夠存儲(chǔ)Emojis,因此UTF8MB4現(xiàn)在是8.0中的默認(rèn)字符集。最后,數(shù)據(jù)類型得到了改進(jìn),在BINARY數(shù)據(jù)類型上進(jìn)行了按位操作,并且改進(jìn)了IPv6和UUID功能。
下面簡(jiǎn)要介紹 MySQL 8 中值得關(guān)注的新特性和改進(jìn)。
- 性能:MySQL8.0的速度要比MySQL5.7 快 2 倍。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負(fù)載、IO 密集型工作負(fù)載、以及高競(jìng)爭(zhēng)("hot spot"熱點(diǎn)競(jìng)爭(zhēng)問題)工作負(fù)載。

- NoSQL:MySQL從5.7版本開始提供 NoSQL 存儲(chǔ)功能,目前在8.0版本中這部分功能也得到了更大的改進(jìn)。該項(xiàng)功能消除了對(duì)獨(dú)立的 NoSQL 文檔數(shù)據(jù)庫的需求,而 MySQL 文檔存儲(chǔ)也為 schema-less 模式的 JSON 文檔提供了多文檔事務(wù)支持和完整的ACID合規(guī)性。

- 窗口函數(shù)(Window Functions):從 MySQL 8.0 開始,新增了一個(gè)叫窗口函數(shù)的概念,它可以用來實(shí)現(xiàn)若干新的查詢方式。窗口函數(shù)與 SUM()、COUNT() 這種集合函數(shù)類似,但它不會(huì)將多行查詢結(jié)果合并為一行,而是將結(jié)果放回多行當(dāng)中。即窗口函數(shù)不需要 GROUP BY。
- 窗口函數(shù)
- MySQL 8.0提供了SQL窗口功能。與分組集合函數(shù)類似,窗口函數(shù)對(duì)一組行進(jìn)行一些計(jì)算,例如COUNT或SUM。但是,如果分組聚合將這組行集合到一行中,則窗口函數(shù)將為結(jié)果集中的每一行執(zhí)行聚合。
- 窗口化的聚合函數(shù):COUNT,SUM,AVG,MIN,MAX,BIT_OR,BIT_AND,BIT_XOR,STDDEV_POP(及其同義詞STD,STDDEV),STDDEV_SAMP,VAR_POP(及其同義詞VARIANCE)和VAR_SAMP。
- 專門的窗口函數(shù)是:RANK,DENSE_RANK,PERCENT_RANK,CUME_DIST,NTILE,ROW_NUMBER,F(xiàn)IRST_VALUE,LAST_VALUE,NTH_VALUE,LEAD和LAG
- 窗口函數(shù)
對(duì)窗口函數(shù)(又名分析函數(shù))的支持是一種頻繁的用戶請(qǐng)求
隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當(dāng)對(duì)索引進(jìn)行隱藏時(shí),它不會(huì)被查詢優(yōu)化器所使用。我們可以使用這個(gè)特性用于性能調(diào)試,例如我們先隱藏一個(gè)索引,然后觀察其對(duì)數(shù)據(jù)庫的影響。如果數(shù)據(jù)庫性能有所下降,說明這個(gè)索引是有用的,然后將其“恢復(fù)顯示”即可;如果數(shù)據(jù)庫性能看不出變化,說明這個(gè)索引是多余的,可以考慮刪掉。
降序索引:MySQL 8.0 為索引提供按降序方式進(jìn)行排序的支持,在這種索引中的值也會(huì)按降序的方式進(jìn)行排序。
-
公用表表達(dá)式(Common Table Expressions CTE):在復(fù)雜的查詢中使用嵌入式表時(shí),使用 CTE 使得查詢語句更清晰。
- MySQL 8.0提供[遞歸]公用表表達(dá)式(CTE)。非遞歸CTE可以解釋為“改進(jìn)的派生表”,因?yàn)樗试S派生表被多次引用。遞歸CTE是一組迭代構(gòu)建的行:從最初的一組行開始,一個(gè)進(jìn)程派生新的行,然后將這些新的行重新輸入到進(jìn)程中,產(chǎn)生更多的行,等等,直到該過程不再生成行。
UTF-8 編碼:從 MySQL 8 開始,使用 utf8mb4 作為 MySQL 的默認(rèn)字符集。
JSON:MySQL 8 大幅改進(jìn)了對(duì) JSON 的支持,添加了基于路徑查詢參數(shù)從 JSON 字段中抽取數(shù)據(jù)的 JSON_EXTRACT() 函數(shù),以及用于將數(shù)據(jù)分別組合到 JSON 數(shù)組和對(duì)象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數(shù)。
可靠性:InnoDB 現(xiàn)在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實(shí)現(xiàn)事務(wù)完整性,要么失敗回滾,要么成功提交,不至于出現(xiàn) DDL 時(shí)部分成功的問題,此外還支持 crash-safe 特性,元數(shù)據(jù)存儲(chǔ)在單個(gè)事務(wù)數(shù)據(jù)字典中。
高可用性(High Availability):InnoDB 集群為您的數(shù)據(jù)庫提供集成的原生 HA 解決方案。
安全性:對(duì) OpenSSL 的改進(jìn)、新的默認(rèn)身份驗(yàn)證、SQL 角色、密碼強(qiáng)度、授權(quán)。
MySQL8的安裝介紹
-
進(jìn)入官網(wǎng)后,點(diǎn)擊"Dowload",然后頁面往下拉
image -
接下來看到的頁面是這樣的,紅色框框的鏈接就是mysql社區(qū)版,是免費(fèi)的mysql版本,然后我們點(diǎn)擊這個(gè)框框的鏈接:
image -
接下來跳轉(zhuǎn)到這個(gè)頁面,在這里,我們只要下載社區(qū)版的Server就可以了:
image 下載免安裝版(windows以外的其他系統(tǒng)除外)

- 至此,安裝包就下載好了!
注意,安裝的目錄應(yīng)當(dāng)放在指定位置,其次,絕對(duì)路徑中避免出現(xiàn)中文,推薦首選英文為命名條件!

MySQL解壓和配置環(huán)境變量
找一個(gè)文件夾放入解壓后的mysql,不建議放c盤,200M左右的sql解壓后大約接近1G
把MySQL解壓后的bin文件地址加入環(huán)境變量的path,方便終端尋找MySQL命令行。
MySQL 創(chuàng)建配置
下載完后,建議解壓到一個(gè)沒有中文的路徑,在解壓目錄創(chuàng)建my.ini配置文件(如果沒有就自己手動(dòng)建立一個(gè)即可)
image
添加相關(guān)基本配置
# 這些是基本配置信息
[client]
# 設(shè)置mysql客戶端默認(rèn)字符集
default-character-set=utf8mb4
[mysqld]
# 設(shè)置3336端口
port = 3336
# 設(shè)置mysql的安裝目錄
basedir=D:\developer\installed\mysql8\mysql-8.0.12-winx64
# 設(shè)置 mysql數(shù)據(jù)庫的數(shù)據(jù)的存放目錄
datadir=D:\developer\installed\mysql8\mysql-8.0.12-winx64\data
# 允許最大連接數(shù)
max_connections=20
# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎
default-storage-engine=INNODB
# 允許連接失敗的次數(shù)。
max_connect_errors=10
# 服務(wù)端使用的字符集默認(rèn)為utf8mb4
character-set-server=utf8mb4
# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎
# 使用“mysql_native_password”插件認(rèn)證
#mysql_native_password
default_authentication_plugin=mysql_native_password
#設(shè)置時(shí)區(qū)為東八區(qū),此項(xiàng)設(shè)置后,在連接MySQL的時(shí)候可以不用每次都手動(dòng)設(shè)置時(shí)區(qū)
default-time-zone = '+8:00'
- mysql給出的初始密碼太復(fù)雜了,一般我們需要改為一個(gè)簡(jiǎn)單的密碼方便之后登陸,在MySQL8.0.4以前,執(zhí)行:SET PASSWORD=PASSWORD(’[修改的密碼]’),即可更改密碼,但MySQL8.0.4開始,這樣默認(rèn)是不行的。因?yàn)橹?,MySQL的密碼認(rèn)證插件是“mysql_native_password”,而現(xiàn)在使用的是“caching_sha2_password”。
- 因?yàn)楫?dāng)前有很多數(shù)據(jù)庫工具和鏈接包都不支持“caching_sha2_password”,為了方便,暫時(shí)需要改回“mysql_native_password”認(rèn)證插件。
初始化MySQL服務(wù)
采用cmd進(jìn)入解壓后的bin目錄,輸入mysqld --initialize --console
-
mysql會(huì)在和bin同級(jí)目錄下產(chǎn)生data文件,即root的數(shù)據(jù)庫,并產(chǎn)生如下紅框中的隨機(jī)密碼(如果沒有密碼,可以使用mysql -uroot -p直接登陸),對(duì)應(yīng)賬號(hào)為root。在沒有更改密碼前,需要記住這個(gè)密碼,后續(xù)登錄需要用到。
image
安裝MySQL服務(wù)
- 還在bin 目錄下執(zhí)行命令
mysqld --install [服務(wù)名]
后面的服務(wù)名可以不寫,默認(rèn)的名字為 mysql。當(dāng)然,如果電腦上需要安裝多個(gè)MySQL服務(wù),就可以用不同的名字區(qū)分了,比如 liboMySQL
-
在mysql的bin目錄下面執(zhí)行: mysqld --install
報(bào)錯(cuò)信息如下:Install/Remove of the Service Denied
解決辦法:打開cmd.exe程序的時(shí)候選擇“用管理員身份打開”。

出現(xiàn)上述信息則標(biāo)識(shí)成功安裝
啟動(dòng)MySQL服務(wù)
輸入:net start [服務(wù)名]

登錄MySQL服務(wù)
- 登錄指定端口3336
命令如下,這時(shí)候會(huì)提示輸入密碼,使用上面安裝時(shí)給的隨機(jī)密碼,填入即可登錄成功,進(jìn)入MySQL命令模式。
mysql -u root -p 3336
修改密碼
剛才生成的是臨時(shí)密碼,得改。
輸入ALTER USER "root"@"localhost" IDENTIFIED BY "新密碼";
卸載MySQL服務(wù)
停止服務(wù)
net stop libomysql(服務(wù)名)
卸載服務(wù)
mysqld --remove libomysql(服務(wù)名)




