MySQL簡單入門教程

安裝與配置

直接在官網下載即可。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