目录
一、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语句删除视图