前提背景
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)用軟件之一暮蹂。
本文主要講述壓縮版,因為安裝不太方便癌压,但是功能效果都是一樣的仰泻!
- 訪問地址:MySQL官網(wǎng)
- 下載地址:MySQL下載
MySQL8的介紹說明
MySQL 8.0是全球最受歡迎的開源數(shù)據(jù)庫的一個非常令人興奮的新版本,全面改進(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地理支持跪腹。空間參考系統(tǒng)(SRS)飞醉,以及SRS感知空間數(shù)據(jù)類型冲茸,空間索引和空間功能。
可靠性 DDL語句已變得原子性和崩潰安全缅帘,元數(shù)據(jù)存儲在單個事務(wù)數(shù)據(jù)字典中轴术。由InnoDB提供支持!
可觀察性性能架構(gòu)钦无,信息架構(gòu)逗栽,配置變量和錯誤記錄的顯著增強(qiáng)。
可管理性遠(yuǎn)程管理失暂,撤消表空間管理和新的即時DDL彼宠。
安全 OpenSSL改進(jìn),新的默認(rèn)身份驗證弟塞,SQL角色凭峡,分解超級特權(quán),密碼強(qiáng)度等等决记。
性能 InnoDB在讀/寫工作負(fù)載摧冀,IO綁定工作負(fù)載和高爭用“熱點(diǎn)”工作負(fù)載方面明顯更好。
增加了資源組功能系宫,通過將用戶線程映射到CPU索昂,為用戶提供一個選項,以針對特定硬件上的特定工作負(fù)載進(jìn)行優(yōu)化
開發(fā)者需要了解的特性扩借!
MySQL開發(fā)人員需要新功能椒惨,而MySQL 8.0在諸如SQL,JSON往枷,正則表達(dá)式和GIS等領(lǐng)域提供了許多新的和更多需求的功能框产。開發(fā)人員也希望能夠存儲Emojis,因此UTF8MB4現(xiàn)在是8.0中的默認(rèn)字符集错洁。最后,數(shù)據(jù)類型得到了改進(jìn)戒突,在BINARY數(shù)據(jù)類型上進(jìn)行了按位操作屯碴,并且改進(jìn)了IPv6和UUID功能。
下面簡要介紹 MySQL 8 中值得關(guān)注的新特性和改進(jìn)膊存。
- 性能:MySQL8.0的速度要比MySQL5.7 快 2 倍导而。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負(fù)載忱叭、IO 密集型工作負(fù)載、以及高競爭("hot spot"熱點(diǎn)競爭問題)工作負(fù)載今艺。
- NoSQL:MySQL從5.7版本開始提供 NoSQL 存儲功能韵丑,目前在8.0版本中這部分功能也得到了更大的改進(jìn)。該項功能消除了對獨(dú)立的 NoSQL 文檔數(shù)據(jù)庫的需求虚缎,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務(wù)支持和完整的ACID合規(guī)性撵彻。
- 窗口函數(shù)(Window Functions):從 MySQL 8.0 開始,新增了一個叫窗口函數(shù)的概念实牡,它可以用來實現(xiàn)若干新的查詢方式陌僵。窗口函數(shù)與 SUM()、COUNT() 這種集合函數(shù)類似创坞,但它不會將多行查詢結(jié)果合并為一行碗短,而是將結(jié)果放回多行當(dāng)中。即窗口函數(shù)不需要 GROUP BY题涨。
- 窗口函數(shù)
- MySQL 8.0提供了SQL窗口功能偎谁。與分組集合函數(shù)類似,窗口函數(shù)對一組行進(jìn)行一些計算纲堵,例如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ù)
對窗口函數(shù)(又名分析函數(shù))的支持是一種頻繁的用戶請求
隱藏索引:在 MySQL 8.0 中纵刘,索引可以被“隱藏”和“顯示”。當(dāng)對索引進(jìn)行隱藏時荸哟,它不會被查詢優(yōu)化器所使用假哎。我們可以使用這個特性用于性能調(diào)試,例如我們先隱藏一個索引敲茄,然后觀察其對數(shù)據(jù)庫的影響位谋。如果數(shù)據(jù)庫性能有所下降,說明這個索引是有用的堰燎,然后將其“恢復(fù)顯示”即可掏父;如果數(shù)據(jù)庫性能看不出變化,說明這個索引是多余的秆剪,可以考慮刪掉赊淑。
降序索引:MySQL 8.0 為索引提供按降序方式進(jìn)行排序的支持,在這種索引中的值也會按降序的方式進(jìn)行排序仅讽。
-
公用表表達(dá)式(Common Table Expressions CTE):在復(fù)雜的查詢中使用嵌入式表時陶缺,使用 CTE 使得查詢語句更清晰。
- MySQL 8.0提供[遞歸]公用表表達(dá)式(CTE)洁灵。非遞歸CTE可以解釋為“改進(jìn)的派生表”饱岸,因為它允許派生表被多次引用。遞歸CTE是一組迭代構(gòu)建的行:從最初的一組行開始徽千,一個進(jìn)程派生新的行苫费,然后將這些新的行重新輸入到進(jìn)程中,產(chǎn)生更多的行双抽,等等百框,直到該過程不再生成行。
UTF-8 編碼:從 MySQL 8 開始牍汹,使用 utf8mb4 作為 MySQL 的默認(rèn)字符集铐维。
JSON:MySQL 8 大幅改進(jìn)了對 JSON 的支持,添加了基于路徑查詢參數(shù)從 JSON 字段中抽取數(shù)據(jù)的 JSON_EXTRACT() 函數(shù)慎菲,以及用于將數(shù)據(jù)分別組合到 JSON 數(shù)組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數(shù)嫁蛇。
可靠性:InnoDB 現(xiàn)在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實現(xiàn)事務(wù)完整性钧嘶,要么失敗回滾棠众,要么成功提交,不至于出現(xiàn) DDL 時部分成功的問題有决,此外還支持 crash-safe 特性闸拿,元數(shù)據(jù)存儲在單個事務(wù)數(shù)據(jù)字典中。
高可用性(High Availability):InnoDB 集群為您的數(shù)據(jù)庫提供集成的原生 HA 解決方案书幕。
安全性:對 OpenSSL 的改進(jìn)新荤、新的默認(rèn)身份驗證、SQL 角色台汇、密碼強(qiáng)度苛骨、授權(quán)。
MySQL8的安裝介紹
-
進(jìn)入官網(wǎng)后苟呐,點(diǎn)擊"Dowload"痒芝,然后頁面往下拉
-
接下來看到的頁面是這樣的,紅色框框的鏈接就是mysql社區(qū)版牵素,是免費(fèi)的mysql版本严衬,然后我們點(diǎn)擊這個框框的鏈接:
-
接下來跳轉(zhuǎn)到這個頁面,在這里笆呆,我們只要下載社區(qū)版的Server就可以了:
下載免安裝版(windows以外的其他系統(tǒng)除外)
- 至此请琳,安裝包就下載好了!
注意赠幕,安裝的目錄應(yīng)當(dāng)放在指定位置俄精,其次,絕對路徑中避免出現(xiàn)中文榕堰,推薦首選英文為命名條件!
MySQL解壓和配置環(huán)境變量
找一個文件夾放入解壓后的mysql竖慧,不建議放c盤,200M左右的sql解壓后大約接近1G
把MySQL解壓后的bin文件地址加入環(huán)境變量的path逆屡,方便終端尋找MySQL命令行圾旨。
MySQL 創(chuàng)建配置
下載完后,建議解壓到一個沒有中文的路徑康二,在解壓目錄創(chuàng)建my.ini配置文件(如果沒有就自己手動建立一個即可)
添加相關(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)建新表時將使用的默認(rèn)存儲引擎
default-storage-engine=INNODB
# 允許連接失敗的次數(shù)碳胳。
max_connect_errors=10
# 服務(wù)端使用的字符集默認(rèn)為utf8mb4
character-set-server=utf8mb4
# 創(chuàng)建新表時將使用的默認(rèn)存儲引擎
# 使用“mysql_native_password”插件認(rèn)證
#mysql_native_password
default_authentication_plugin=mysql_native_password
#設(shè)置時區(qū)為東八區(qū),此項設(shè)置后沫勿,在連接MySQL的時候可以不用每次都手動設(shè)置時區(qū)
default-time-zone = '+8:00'
- mysql給出的初始密碼太復(fù)雜了挨约,一般我們需要改為一個簡單的密碼方便之后登陸,在MySQL8.0.4以前产雹,執(zhí)行:SET PASSWORD=PASSWORD(’[修改的密碼]’)诫惭,即可更改密碼,但MySQL8.0.4開始蔓挖,這樣默認(rèn)是不行的夕土。因為之前,MySQL的密碼認(rèn)證插件是“mysql_native_password”,而現(xiàn)在使用的是“caching_sha2_password”怨绣。
- 因為當(dāng)前有很多數(shù)據(jù)庫工具和鏈接包都不支持“caching_sha2_password”角溃,為了方便,暫時需要改回“mysql_native_password”認(rèn)證插件篮撑。
初始化MySQL服務(wù)
采用cmd進(jìn)入解壓后的bin目錄减细,輸入mysqld --initialize --console
-
mysql會在和bin同級目錄下產(chǎn)生data文件,即root的數(shù)據(jù)庫赢笨,并產(chǎn)生如下紅框中的隨機(jī)密碼(如果沒有密碼未蝌,可以使用mysql -uroot -p直接登陸),對應(yīng)賬號為root茧妒。在沒有更改密碼前萧吠,需要記住這個密碼,后續(xù)登錄需要用到桐筏。
安裝MySQL服務(wù)
- 還在bin 目錄下執(zhí)行命令
mysqld --install [服務(wù)名]
后面的服務(wù)名可以不寫纸型,默認(rèn)的名字為 mysql。當(dāng)然九昧,如果電腦上需要安裝多個MySQL服務(wù)绊袋,就可以用不同的名字區(qū)分了,比如 liboMySQL
-
在mysql的bin目錄下面執(zhí)行: mysqld --install
報錯信息如下:Install/Remove of the Service Denied
解決辦法:打開cmd.exe程序的時候選擇“用管理員身份打開”铸鹰。
出現(xiàn)上述信息則標(biāo)識成功安裝
啟動MySQL服務(wù)
輸入:net start [服務(wù)名]
登錄MySQL服務(wù)
- 登錄指定端口3336
命令如下癌别,這時候會提示輸入密碼,使用上面安裝時給的隨機(jī)密碼蹋笼,填入即可登錄成功展姐,進(jìn)入MySQL命令模式。
mysql -u root -p 3336
修改密碼
剛才生成的是臨時密碼剖毯,得改圾笨。
輸入ALTER USER "root"@"localhost" IDENTIFIED BY "新密碼";
卸載MySQL服務(wù)
停止服務(wù)
net stop libomysql(服務(wù)名)
卸載服務(wù)
mysqld --remove libomysql(服務(wù)名)