一、下載
官網地址: https://dev.mysql.com/downloads/mysql/
選擇:macOS 10.14 (x86, 64-bit), Compressed TAR Archive
下載后,得到一個131.9m的壓縮包 mysql-8.0.13-macos10.14-x86_64.tar.gz,將其解壓到/usr/local/下,並重命名為mysql (即:最后的完整目錄應該是/usr/local/mysql)
二、調整目錄權限
cd /usr/local
chown -R 當前登錄mac的管理員用戶名 mysql
這一步的目的,主要是保證/usr/local/mysql下可以寫入數據
三、初始化數據庫
cd /usr/local/mysql/bin
sudo ./mysqld --initialize --user=mysql
2018-12-01T14:42:12.002186Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server in progress as process 4229
2018-12-01T14:42:12.004783Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/mysql/data/ is case insensitive
2018-12-01T14:42:12.006285Z 0 [Warning] [MY-010122] [Server] One can only use the --user switch if running as root
2018-12-01T14:42:14.187443Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iM46X&03qRc_
2018-12-01T14:42:15.427614Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server has completed
注意藍色標出的部分,初始化過程中,會生成一個隨機的root初始密碼,記好這個,后面會用到。
如果沒記下這個密碼,導致后面無法登錄,可以rm -rf /usr/local/mysql/data/* 把所有文件干掉,再來一把。
四、啟動mysql
cd /usr/local/mysql/support-files
./mysql.server start (注:類似的status為查看狀態,stop為停止服務)
Starting MySQL
. SUCCESS!
看到這個SUCCESS就表示啟動成功了。
五、修改密碼
cd /usr/local/mysql/bin
./mysqladmin -u root -p password
初始密碼實在太難記了,可以用上面的命令先改一下 (注:密碼要滿足復雜性要求,比如Www.123.abc之類)
這一步做完后,應該就可以用
./mysql -u root -p
命令行終端登錄了,不過8.0貌似安全策略做了調整,用navicat之類的工具連接,會出現:
Client does not support authentication protocol requested by server; consider upgrading MySQL client
之類的錯誤,解決方法:
use mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';
FLUSH PRIVILEGES;
然后應該就可以了。
六、mysql 8新增的一些函數
6.1 over()開窗函數
over開窗函數,在oracle中早就有了,但是mysql直到8.0+才開始支持,參考文檔見:https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html,它的作用有點類似於將"聚合結果行轉列", 具體參考下面的示例(來自官網)
如上圖,這是一張銷售記錄表,上面記錄了"某一年、某個國家、某種產品"的銷售利潤。如果我們要分析,每一行銷售記錄,在本年/本國/本類產品/甚至所有銷售中的貢獻度(即:所占百分比)。按傳統思路,至少得先匯總出 "每年的總銷售金額,每個國家的總銷售金額,每類產品的總銷售金額...",然后用本行的profit去除這些匯總值,才能計算出百分比。
有了over函數后,就可以很簡單了:
SELECT YEAR '年份' , country '國家' , product '產品' , profit '產品利潤' , SUM(profit) OVER(PARTITION BY country , YEAR ,product) AS '年度-某國家-某產品-利潤小計' , SUM(profit) OVER(PARTITION BY country , YEAR) AS '年度-某國-利潤小計' , SUM(profit) OVER(PARTITION BY country) AS '某國-利潤小計' , SUM(profit) OVER(PARTITION BY YEAR) AS '年度-利潤小計' , SUM(profit) over() AS '利潤合計' FROM sales ORDER BY YEAR , country , product , profit;
結果如下:
各種聚合結果,可以方便的展示在同一行,如果要輸出百分比,直接拿"利潤"這一欄,除以后面某一列匯總值即可。
6.2 row_number()函數
這個函數同樣也是從oracle模仿過來的,用法如下:
select row_number() over w as 'No.' , year , country , product , profit from sales where year = 2001 window w as(order by country) order by country
輸出:
詳情可參考 https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html