安裝與配置
直接在官網下載即可。macOS也可以在brew下載,不過配置起來可能會不太一樣。
打開安裝包一路下一步即可。
macOS裝好之後就會在系統設置中多出一項來,點開看到沒問題就是安裝好了。
![]()
然後這個時候還需要配置環境變量,否則無法使用。
Windows是在環境變量管理器裏添加。
mac則是在~/.zshrc裏面加入一條:
export PATH=$PATH:/usr/local/mysql/bin
注意這是官網安裝包的方式,如果是Homebrew的話路徑不一樣,不過brew應該已經配置好了環境變量。
這樣就完成了mysql的配置。可以執行一條
mysql --version
來查看是否正常工作。
MySQL使用
客戶端與服務端
mysql常規安裝就包含了服務端和客戶端。
很多教程會在安裝後提到如何啓動mysql服務,也就是說它在電腦上啓動了一個mysql服務器,存了一個數據庫在本地並且可以通過網絡訪問。
平時在命令行使用mySQL命令去連接別的數據庫,這是用的客戶端。負責發送SQL指令等
很明顯,通常來講我們更多隻是用客戶端,連接位於數據中心的遠程數據庫。但在學習、研究中常常需要用本地的數據庫
接入
通常格式如下:
mysql -h 主機名或IP地址 -P 端口號 -u 用戶名 -p
通常就直接
mysql -h 127.0.0.1 -u 用戶名 -p
學習中,用戶通常是直接用root。數據庫用戶的密碼。
如果是訪問本地的mysql,則是不需要寫ip地址直接登錄即可。
mysql -u root -p
執行這一條,會要求輸入密碼
可以直接將密碼寫到命令裏面:
mysql -uroot -prootpass123
這是在登錄賬號爲root、密碼爲rootpass123的賬戶。
兩種登錄方式
通常,更多是-h參數使用IP地址連接到遠程服務器
mysql -h 目標IP地址 -u 用戶名 -p
自然,一般是通過連接127.0.0.1來連接的本機的數據庫,
mysql -h 127.0.0.1 -u root -p
但是功能有所不同。mysql有兩種連接方式,可以不用IP地址來登錄:
mysql -u root -p
這種不帶-h的這種,是直接通過socket和數據庫通信的,這是一種更加高效的方法。但是這很有可能會登錄失敗,因爲使用的是'user'@'localhost',嘗試使用當前操作系統的用戶去匹配root,但是通常我們並不是使用root賬戶,因此會失敗。
指定了-h纔是使用TCP/IP連接的。注意,-h指定爲localhost一般也是socket
不管是怎麼樣,登錄之後就會出現
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
此時就是登陸成功了。就可以開始輸入MySQL語句執行了。
mySQL默認的端口是在3306。
可以用-P來手動指定別的端口
mysql -h IP地址 -P 3607 # 改到3307
數據庫操作
訪問MySQL數據庫,比較推薦Navicat和DataGrip。
以DataGrip爲例,連接後這樣操作即可訪問數據庫。
![]()
![]()
(把要訪問的數據庫勾選上)
數據庫結構
一個mysql服務器,裏面的結構可能是這樣的:
![]()
比如圖裏這個服務器裏面有這些數據庫:
ecommerce_db、fintech_db 👉 這是業務數據庫(人創建的)
information_schema
mysql
performance_schema
sys
後面這幾個都是MySQL自帶的系統數據庫。
information_schema存儲所有數據庫的“元數據”(表結構、列、索引等),mysql是存儲用戶、權限、賬號等核心信息的數據庫,performance_schema裏是性能監控數據如查詢耗時、鎖等,sys是對performance_schema的封裝。
然後那個“服務器對象”是數據庫服務器的全局配置管理入口。包括裏面的“用戶”就是數據庫賬號(格式是用戶名@允許訪問的主機,比如途中的root@localhost就是隻能在本機登錄的,而root@%是可以在任何機器上登錄的)。
虛擬視圖這是系統的某些實時數據,例如sessions可能就是當前連接、正在執行的SQL等。
另外,在數據庫裏可以看到有個“例程-sp_get_order“,那個是存儲過程,它的本質就是一個封裝了的一些MySQL語句,就類似函數那樣。從名字來看,這個看起來可能是獲取訂單的存儲過程,內部可能是這樣的
基礎操作
在使用mysql命令行連接到數據服務器,出現mysql>之後,就可以輸入mySQL語句。
mysql語句只是簡單的單詞等組成的,不區分大小寫。
需要注意,進入的這不是一個數據庫,而是服務器,這時
SHOW DATABASES;
可以列出所有的數據庫。
如果是進入自己本機的數據庫,可能看到的是這樣的:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.039 sec)
這些都是mysql的系統數據庫,也就是說還沒有我們的數據庫。可以創建個數據庫
create database mydatabase;
如果是連接到已經有數據庫的mysql服務器,我們可以看到類似這樣的內容
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| ecommerce_db |
| fintech_db |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.197 sec)
然後,我們可以選擇進入某個
USE 某個數據庫名稱;
來選擇進入某個數據庫,之後對這個進行操作。
然後可以查看這個數據庫裏的所有表:
SHOW TABLES;
結果可能是這樣的:
mysql> SHOW TABLES;
+------------------------+
| Tables_in_ecommerce_db |
+------------------------+
| customer_feedback |
| login_log |
| order_ext_data |
| payment_detail |
| products |
| shipping_address |
| user_attachments |
| user_profile |
+------------------------+
8 rows in set (0.006 sec)
創建表
注意mysql和SQL Server不一樣,不能使用
CREATE TABLE product_data (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
price DOUBLE
);
數據類型
在數據表中,每個單元格的數據都是有標記了類型的,例如TEXT、BLOB、VARCHAR、VARBINARY等。
這些通常是在建表的時候就給這個字段定義了類型:
CREATE TABLE users (
name VARCHAR(100),
profile TEXT,
avatar BLOB
);
也可以通過來查看字段的類型:
需要注意,這和現代編程語言中賦值不同,數據庫是不會檢查之後實際填入這些字段裏的值是什麼東西的。
字符串類型
CHAR
長度在 的固定長度的字符串。
VARCHAR
TEXT
長文本。可以容納2
數值型
有int和float等。
二進制類型
BLOB
Binary Large Object
BINARY
固定長度二進制
VARBINARY
可變長度二進制
BYTEA(PostgreSQL)
PostgreSQL裏的二進制。
結構化類型
有的數據庫還會做解析,比如可以
data JSON
自動解析
例程與函數
MySQL中有兩種東西都類似於編程中的函數,例程和函數。它們分別代表了編程中無返回值的函數和有返回值的函數。
例程是存儲若干SQL操作的,也就是說它是不返回一個值,而是用來執行一段SQL邏輯的。
前面講數據庫結構的時候就有提到數據庫裏面有個sp_get_order,這也許是做來實現獲取訂單
那我們可以猜測它裏面可能是這樣的:
CREATE PROCEDURE sp_get_order(IN user_id INT)
BEGIN
SELECT * FROM orders WHERE user_id = user_id;
END;
然後調用的時候是這樣的:
CALL sp_get_order(123);
而函數則是用來返回一個值。
比如這是常見的函數的樣子
CREATE FUNCTION calc_tax(price DECIMAL)
RETURNS DECIMAL
BEGIN
RETURN price * 0.1;
END;
CREATE PROCEDURE process_order(IN user_id INT)
BEGIN
INSERT INTO orders ...
UPDATE users ...
END;
更多遊戲資訊請關註:電玩幫遊戲資訊專區
電玩幫圖文攻略 www.vgover.com
