目錄
一、MySQL安裝配置
1、下載mysql
2、下載mysql-shell
二、MySQL基本概念
1. 數據庫(Database)
2. 表(Table)
3. 數據類型(Data Type)
4. 主鍵(Primary Key)
5. 索引(Index)
6. 存儲引擎(Storage Engine)
三、Mysql基礎語句
1、創建、刪除、查看 數據庫
2、在數據庫中創建表
3、對表內數據的修改,以列為例,修改數據值,數據名,增加數據項
4、刪除表中數據項語句
5、刪除整個表
6、表中數據的增刪改查
7、數據庫的導入導出
(1)導出數據庫(備份)
基本語法:
常用參數說明:
(2)導入數據庫(恢復)
前提條件:
基本語法:
注意事項:
8、常用語句
(1)常用
?編輯(2)UNION、INTERSECT?和?EXCEPT
① UNION(并集)
② INTERSECT(交集)
③EXCEPT(差集)
9、子查詢
10、表關聯
(1)內連接(INNER JOIN)
(2)左連接(LEFT JOIN / LEFT OUTER JOIN)
(3)右連接(RIGHT JOIN / RIGHT OUTER JOIN)
11、表索引
12、視圖
一、MySQL安裝配置
1、下載mysql
官方下載地址: MySQL :: MySQL Downloads
windows版本下載點擊這里。下載好之后安裝,一路next,安裝完成。
2、下載mysql-shell
可以直接在vscode里下載,也可以使用workbench
二、MySQL基本概念
1. 數據庫(Database)
數據庫是存儲數據的倉庫,以結構化的方式組織和管理數據。MySQL 中可以創建多個數據庫,每個數據庫獨立存儲不同應用的數據(如電商數據庫、博客數據庫)。
2. 表(Table)
表是數據庫中存儲數據的基本單位,類似 Excel 表格,由行和列組成:
- 列(Column):也稱字段,定義數據的類型(如姓名、年齡、郵箱)。
- 行(Row):也稱記錄,是具體的數據條目(如一條用戶信息)。
3. 數據類型(Data Type)
定義表中列的取值類型,常見類型包括:
- 數值型:
INT
(整數)、FLOAT
(浮點數)、DECIMAL
(高精度小數,如金額)。 - 字符串型:
VARCHAR(n)
(可變長度字符串,如姓名)、CHAR(n)
(固定長度字符串)、TEXT
(長文本)。 - 日期時間型:
DATE
(日期,如 2023-10-01)、TIME
(時間,如 14:30:00)、DATETIME
(日期 + 時間)。 - 其他類型:
BOOLEAN
(布爾值)、ENUM
(枚舉,如性別:男 / 女)等。
4. 主鍵(Primary Key)
表中唯一標識一條記錄的字段(或多個字段的組合),具有以下特性:
- 唯一性:主鍵值在表中不可重復。
- 非空性:主鍵字段不能為?
NULL
。 - 通常用?
INT
?類型并設置自增(AUTO_INCREMENT
),方便管理。
5. 索引(Index)
提高查詢效率的數據結構,類似書籍的目錄。對頻繁查詢的字段創建索引,可大幅減少數據掃描范圍,但會增加寫入(插入 / 更新 / 刪除)操作的開銷。常見索引類型:
- 普通索引(
INDEX
):加速查詢。 - 主鍵索引:自動為 primary key 創建的索引。
- 唯一索引(
UNIQUE
):索引值唯一,可用于保證字段唯一性(如郵箱不重復)。
6. 存儲引擎(Storage Engine)
MySQL 中數據的存儲和管理方式由存儲引擎決定,不同引擎特性不同,常用引擎:
三、Mysql基礎語句
1、創建、刪除、查看 數據庫
create database world;
show databases;
drop databese world;
在命令行執行如下:
2、在數據庫中創建表
use game; #使用game這個數據庫
create table player(
id int,
name varchar(100),
level int,
exp int,
gold decimal(10,2)
);
3、對表內數據的修改,以列為例,修改數據值,數據名,增加數據項
DESC player; #查看創建的表
Alter table player MODIFY COLUMN name VARCHAR(200);
Alter table player RENAME COLUMN name to nick_name;
Alter table player ADD column last_login datetime;
Alter table player DROP column last_login;
4、刪除表中數據項語句
5、刪除整個表
drop table player;
6、表中數據的增刪改查
insert into player (id,name,level,exp,gold) values(1,'張三',1,1,1); #插入一條數據
insert into player (id,name) values(2,'里斯');
selcet * from player; #查看表中數據;update player set level =1 where name = '里斯' #修改表中一條數據的列值
update player set exp=0, gold=0; #批量修改 單詞操作沒條件限制 非常危險 workbench有safe modedelete from player where gold=0; #批量刪除
7、數據庫的導入導出
(1)導出數據庫(備份)
使用?mysqldump
?命令可以將數據庫中的表結構和數據導出為 SQL 腳本文件,方便備份或遷移。
基本語法:
# 導出整個數據庫(結構+數據)
mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名.sql# 示例(導出名為mydb的數據庫到mydb_backup.sql)
mysqldump -u root -p mydb > mydb_backup.sql
常用參數說明:
-u
:指定 MySQL 用戶名(如?root
)。-p
:提示輸入密碼(注意?-p
?后無空格,回車后會要求輸入密碼)。--databases
:導出多個數據庫(需指定數據庫名列表)。mysqldump -u root -p --databases db1 db2 > db1_db2_backup.sql
--all-databases
:導出 MySQL 中所有數據庫(謹慎使用,可能包含系統數據庫)。--no-data
:只導出表結構,不包含數據。mysqldump -u root -p --no-data mydb > mydb_structure.sql
--single-transaction
:導出時使用事務(適合 InnoDB 引擎,避免鎖表)。
(2)導入數據庫(恢復)
使用?mysql
?命令可以將導出的 SQL 腳本文件導入到 MySQL 中,恢復數據或遷移到新環境。
前提條件:
- 需先創建目標數據庫(如果不存在):
# 登錄 MySQL 命令行 mysql -u root -p# 在 MySQL 交互模式中創建數據庫 CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4; exit; # 退出 MySQL 交互模式
基本語法:
# 導入 SQL 文件到指定數據庫
mysql -u 用戶名 -p 數據庫名 < 導入的文件名.sql# 示例(將mydb_backup.sql導入到mydb數據庫)
mysql -u root -p mydb < mydb_backup.sql
注意事項:
- 導入前確保 SQL 文件路徑正確(可使用絕對路徑,如?
/home/user/backup.sql
)。 - 如果 SQL 文件中已包含?
CREATE DATABASE
?語句,可直接導入到 MySQL 根目錄(不指定數據庫名):mysql -u root -p < mydb_backup.sql
8、常用語句
(1)常用

(2)UNION
、INTERSECT
?和?EXCEPT
① UNION(并集)
作用:合并兩個或多個查詢的結果集,并自動去除重復行。
語法:
查詢1
UNION
查詢2;
示例:
假設有兩個表?students
?和?teachers
,都包含?name
?列,查詢所有不重復的姓名:
SELECT name FROM students
UNION
SELECT name FROM teachers;
變體:UNION ALL
保留所有結果(包括重復行),性能優于?UNION
(無需去重):
SELECT name FROM students
UNION ALL
SELECT name FROM teachers;
② INTERSECT(交集)
作用:返回兩個查詢結果集中的共同行(即同時存在于兩個結果集中的行)。
語法:
查詢1
INTERSECT
查詢2;
示例:
查詢既是學生又是老師的姓名(假設存在重名):
SELECT name FROM students
INTERSECT
SELECT name FROM teachers;
注意:
- MySQL 不直接支持?
INTERSECT
,可通過?INNER JOIN
?替代:sql
SELECT s.name FROM students s INNER JOIN teachers t ON s.name = t.name;
- PostgreSQL、SQL Server 等數據庫支持?
INTERSECT
。
③EXCEPT(差集)
作用:返回在第一個查詢結果中存在,但在第二個查詢結果中不存在的行。
語法:
查詢1
EXCEPT
查詢2;
示例:
查詢是學生但不是老師的姓名:
注意:
- MySQL 不支持?
EXCEPT
,可通過?LEFT JOIN + IS NULL
?替代:SELECT s.name FROM students s LEFT JOIN teachers t ON s.name = t.name WHERE t.name IS NULL;
- 部分數據庫中用?
MINUS
?代替?EXCEPT
(如 Oracle)。
9、子查詢
10、表關聯
在 SQL 中,表關聯(JOIN)用于將多個表中的數據通過共同字段連接起來,常見的三種基礎關聯方式是:內連接(INNER JOIN)、左連接(LEFT JOIN)、右連接(RIGHT JOIN)。
(1)內連接(INNER JOIN)
作用:只返回兩個表中匹配條件的交集數據(即兩個表中都存在符合條件的記錄)。
語法:
SELECT 列名
FROM 表1
INNER JOIN 表2
ON 表1.關聯字段 = 表2.關聯字段;
示例:
假設有?users
?表(用戶信息)和?orders
?表(訂單信息),通過?user_id
?關聯,查詢有訂單記錄的用戶及其訂單:
SELECT u.name, o.order_id, o.order_time
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;
結果:只顯示有訂單的用戶及其對應的訂單信息,無訂單的用戶和無對應用戶的訂單都不會出現。
(2)左連接(LEFT JOIN / LEFT OUTER JOIN)
作用:返回左表的所有記錄,以及右表中與左表匹配的記錄;如果右表無匹配,右表字段顯示?NULL
。
語法:
SELECT 列名
FROM 表1(左表)
LEFT JOIN 表2(右表)
ON 表1.關聯字段 = 表2.關聯字段;
示例:
查詢所有用戶(包括無訂單的用戶)及其訂單信息:
SELECT u.name, o.order_id, o.order_time
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id;
結果:所有用戶都會顯示,有訂單的用戶會關聯訂單信息,無訂單的用戶訂單字段為?NULL
。
(3)右連接(RIGHT JOIN / RIGHT OUTER JOIN)
作用:與左連接相反,返回右表的所有記錄,以及左表中與右表匹配的記錄;如果左表無匹配,左表字段顯示?NULL
。
語法:
SELECT 列名
FROM 表1(左表)
RIGHT JOIN 表2(右表)
ON 表1.關聯字段 = 表2.關聯字段;
示例:
查詢所有訂單(包括無對應用戶的異常訂單)及其用戶信息:
SELECT u.name, o.order_id, o.order_time
FROM users u
RIGHT JOIN orders o
ON u.id = o.user_id;
結果:所有訂單都會顯示,有對應用戶的訂單會關聯用戶信息,無對應用戶的訂單用戶字段為?NULL
。
- 關聯時需通過?
ON
?指定關聯條件(通常是兩表的主鍵和外鍵關系)。 - 可通過表別名(如?
u
、o
)簡化語句。 - 實際開發中,左連接使用頻率高于右連接(右連接可通過交換表位置轉為左連接)。
11、表索引
12、視圖
表中數據發生變化的時候,視圖中的數據會隨之動態改變。
drop view語句刪除視圖