MySQL 基础指令全解析:从入门到熟练操作
文章目录
- 前言
- 一、MySQL 是什么
- 二、MySQL 的安装与配置
- 三、MySQL 连接与退出指令
- 1. 连接MySQL服务
- 2. 退出MySQL服务
- 四、数据库基本操作指令
- 1. 查看所有数据库
- 2. 创建数据库
- 3. 选择(切换)数据库
- 4. 查看当前选择的数据库
- 5. 删除数据库
- 五、数据表核心操作指令
- 1. 查看当前数据库的所有表
- 2. 创建数据表
- 3. 查看表结构
- 4. 修改数据表
- (1)添加字段
- (2)修改字段类型/名称
- (3)删除字段
- (4)修改表名
- 5. 删除数据表
- 六、数据CRUD核心操作指令
- 1. 新增数据(Create)
- (1)插入单条数据
- (2)插入多条数据
- 2. 查询数据(Read)
- (1)查询所有数据
- (2)查询指定字段
- (3)条件筛选查询(where)
- (4)排序查询(order by)
- (5)分页查询(limit)
- (6)聚合查询(sum、count、avg等)
- (7)多表连接查询(left join/inner join)
- 3. 修改数据(Update)
- 4. 删除数据(Delete)
- 七、用户与权限管理指令
- 1. 创建用户
- 2. 授予权限
- 3. 查看用户权限
- 4. 撤销权限
- 5. 删除用户
- 八、其他实用指令
- 1. 查看MySQL版本
- 2. 刷新权限
- 3. 查看当前登录用户
- 总结
前言
MySQL 作为目前最流行的关系型数据库管理系统之一,广泛应用于网站开发、数据分析等场景。无论是搭建个人博客,还是开发企业级应用,掌握 MySQL 基础指令都是入门的第一步。这些指令就像 “数据库的操作语言”,能帮我们完成数据的存储、查询、修改和删除等核心需求。本文将系统整理 MySQL 日常高频使用的指令,从连接数据库到权限管理,每个命令都附带语法说明和实操示例,适合新手从零开始学习,也可作为老开发者的速查手册
一、MySQL 是什么
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、MySQL 的安装与配置
三、MySQL 连接与退出指令
为帮助刚接触MySQL的新手快速掌握核心操作,我将从连接数据库开始,按数据库、表、数据的操作逻辑,梳理常用指令并搭配具体示例,让指令用法更易理解。在操作数据库前,首先要通过客户端连接MySQL服务,操作完成后需正确退出,避免资源占用。
1. 连接MySQL服务
语法:
mysql -u 用户名 -p 密码 -h 主机地址 -P 端口号
-u
:指定登录用户名(必填,如root);-p
:指定密码(若紧跟用户名写-p123456
则直接输入密码,若仅写-p
,回车后会提示输入密码,更安全);-h
:指定MySQL服务所在主机地址(本地默认localhost
或127.0.0.1
,远程连接需填服务器IP);-P
:指定端口号(默认3306,若修改过端口需手动填写)。
示例:
- 本地连接(默认端口,密码后续输入):
mysql -u root -p
- 远程连接(IP为192.168.1.100,端口3307):
mysql -u test_user -p -h 192.168.1.100 -P 3307
2. 退出MySQL服务
语法(两种方式均可):
exit; -- 或 quit;
说明:指令后必须加;
(MySQL指令结束符,部分客户端支持\g
),输入后会断开与MySQL服务的连接。
四、数据库基本操作指令
数据库是数据的“容器”,先创建/选择数据库,再进行后续表和数据的操作。
1. 查看所有数据库
语法:
show databases;
作用:列出MySQL中所有已创建的数据库(包含系统默认数据库,如information_schema
、mysql
)。
2. 创建数据库
语法:
create database 数据库名 [character set 字符集] [collate 排序规则];
character set
:指定数据库字符集(默认utf8mb4
,支持表情符号;避免用utf8
,实际仅支持部分Unicode);collate
:指定排序规则(默认utf8mb4_general_ci
,ci
表示不区分大小写)。
示例:创建名为blog_db
的数据库,指定字符集为utf8mb4
:
create database blog_db character set utf8mb4;
3. 选择(切换)数据库
语法:
use 数据库名;
说明:操作表和数据前必须先选择数据库,执行后会提示“Database changed”,表示切换成功。
示例:切换到blog_db
数据库:
use blog_db;
4. 查看当前选择的数据库
语法:
select database();
作用:确认当前正在操作的数据库,避免误操作其他库。
5. 删除数据库
语法:
drop database 数据库名;
警告:删除数据库会同时删除库中所有表和数据,且无法恢复,执行前务必确认!
五、数据表核心操作指令
表是数据库中存储数据的“载体”,需先定义表结构(字段名、字段类型、约束),再插入数据。
1. 查看当前数据库的所有表
语法:
show tables;
说明:需先通过use 数据库名
切换到目标数据库,否则会报错。
2. 创建数据表
语法:
create table 表名 (字段1 数据类型 [约束条件],字段2 数据类型 [约束条件],...字段n 数据类型 [约束条件]
) [character set 字符集];
- 常用数据类型:
int
:整数(如int(11)
,11表示显示宽度,不影响存储范围);varchar(长度)
:可变长度字符串(如varchar(50)
,最大存储50个字符);datetime
:日期时间(格式YYYY-MM-DD HH:MM:SS
,如2024-05-20 14:30:00
);decimal(总位数, 小数位数)
:小数(如decimal(10,2)
,表示最大10位数字,其中2位小数);
- 常用约束条件:
primary key
:主键(唯一标识表中记录,非空且唯一,一张表只能有一个主键);not null
:非空(该字段不能存储空值);unique
:唯一(该字段的值不能重复);default 默认值
:默认值(若插入数据时未指定该字段,自动填充默认值)。
示例:在blog_db
中创建article
表(存储文章信息):
create table article (id int(11) primary key auto_increment, -- 主键,自增(auto_increment)title varchar(100) not null unique, -- 文章标题,非空且唯一content text, -- 文章内容(text适合长文本)author varchar(50) default '匿名作者', -- 作者,默认值“匿名作者”create_time datetime not null -- 创建时间,非空
) character set utf8mb4;
3. 查看表结构
语法(两种常用方式):
-- 方式1:查看字段详情(类型、约束、默认值等)
desc 表名; -- 或 describe 表名;-- 方式2:查看创建表的SQL语句(可验证表结构是否正确)
show create table 表名;
示例:查看article
表结构:
desc article;
4. 修改数据表
常用修改场景:添加字段、修改字段类型/名称、删除字段、修改表名。
(1)添加字段
语法:
alter table 表名 add 新字段 数据类型 [约束条件] [after 已有字段];
after 已有字段
:指定新字段插入的位置(默认在最后一列)。
示例:在article
表的author
字段后添加read_count
(阅读量,默认0):
alter table article add read_count int(11) default 0 after author;
(2)修改字段类型/名称
语法:
-- 修改字段类型
alter table 表名 modify 字段名 新数据类型 [约束条件];-- 修改字段名称+类型
alter table 表名 change 旧字段名 新字段名 新数据类型 [约束条件];
示例:
- 将
article
表的read_count
类型改为decimal(10,0)
:alter table article modify read_count decimal(10,0) default 0;
- 将
read_count
改名为view_count
,类型不变:alter table article change read_count view_count int(11) default 0;
(3)删除字段
语法:
alter table 表名 drop 字段名;
警告:删除字段会同时删除该字段的所有数据,谨慎操作!
示例:删除article
表的view_count
字段:
alter table article drop view_count;
(4)修改表名
语法:
alter table 旧表名 rename to 新表名; -- 或 rename table 旧表名 to 新表名;
示例:将article
表改名为blog_article
:
alter table article rename to blog_article;
5. 删除数据表
语法:
drop table 表名; -- 删除单个表
drop table 表名1, 表名2; -- 同时删除多个表
警告:删除表会清空表中所有数据和结构,无法恢复!
示例:删除blog_article
表:
drop table blog_article;
六、数据CRUD核心操作指令
CRUD是数据库操作的核心(Create新增、Read查询、Update修改、Delete删除),也是日常开发中最常用的指令。
1. 新增数据(Create)
(1)插入单条数据
语法:
-- 方式1:指定所有字段(字段顺序需与表结构一致)
insert into 表名 (字段1, 字段2, ..., 字段n) values (值1, 值2, ..., 值n);-- 方式2:不指定字段(需按表结构顺序插入所有字段的值)
insert into 表名 values (值1, 值2, ..., 值n);
- 字符串值需用
''
(单引号)包裹; - 日期时间值需符合
YYYY-MM-DD HH:MM:SS
格式,且用''
包裹; - 若字段有
default
或auto_increment
,可省略该字段(自动填充值)。
示例:向blog_article
表插入一条文章数据(id
自增,author
用默认值):
insert into blog_article (title, content, create_time)
values ('MySQL基础指令', '本文介绍了MySQL常用操作...', '2024-05-20 15:00:00');
(2)插入多条数据
语法:
insert into 表名 (字段1, 字段2, ..., 字段n)
values (值1-1, 值1-2, ..., 值1-n),(值2-1, 值2-2, ..., 值2-n),...(值m-1, 值m-2, ..., 值m-n);
优势:比单条插入更高效,减少与数据库的交互次数。
示例:向blog_article
表插入两条数据:
insert into blog_article (title, content, author, create_time)
values ('Python连接MySQL', '使用pymysql库连接MySQL...', '小明', '2024-05-21 10:00:00'),('SQL优化技巧', '索引优化能提升查询速度...', '小红', '2024-05-22 09:30:00');
2. 查询数据(Read)
查询是最复杂也最常用的操作,支持单表查询、多表关联、条件筛选、排序、分页等。
(1)查询所有数据
语法:
select * from 表名;
*
:表示查询所有字段(实际开发中建议指定具体字段,避免冗余数据)。
示例:查询blog_article
表的所有文章:
select * from blog_article;
(2)查询指定字段
语法:
select 字段1, 字段2, ..., 字段n from 表名;
示例:查询blog_article
表的title
(标题)和author
(作者):
select title, author from blog_article;
(3)条件筛选查询(where)
语法:
select 字段列表 from 表名 where 条件表达式;
- 常用条件运算符:
- 等于
=
、不等于!=
或<>
; - 大于
>
、小于<
、大于等于>=
、小于等于<=
; like
:模糊查询(%
匹配任意字符,_
匹配单个字符);in
:匹配多个值(如in (值1, 值2)
);between...and
:匹配区间(如between 1 and 10
);is null
/is not null
:判断是否为空(注意:不能用= null
)。
- 等于
示例:
- 查询作者为“小明”的文章:
select title, create_time from blog_article where author = '小明';
- 查询标题包含“MySQL”的文章(模糊查询):
select * from blog_article where title like '%MySQL%';
- 查询2024年5月20日后创建的文章:
select title, create_time from blog_article where create_time > '2024-05-20';
(4)排序查询(order by)
语法:
select 字段列表 from 表名 [where 条件] order by 字段1 [asc/desc], 字段2 [asc/desc];
asc
:升序(默认,如时间从早到晚);desc
:降序(如时间从晚到早);- 可按多个字段排序(先按字段1排序,字段1相同则按字段2排序)。
示例:查询所有文章,按创建时间降序排列(最新的在前):
select title, author, create_time from blog_article order by create_time desc;
(5)分页查询(limit)
语法:
select 字段列表 from 表名 [where 条件] [order by 字段] limit 起始索引, 每页条数;
- 起始索引:从0开始(第1页起始索引为0,第2页为“每页条数”,以此类推);
- 用途:避免一次性查询大量数据,提升性能(如分页展示列表)。
示例:查询blog_article
表,每页显示2条,查询第2页(起始索引=2):
select * from blog_article order by create_time desc limit 2, 2;
(6)聚合查询(sum、count、avg等)
语法:
select 聚合函数(字段) from 表名 [where 条件] [group by 分组字段] [having 分组条件];
- 常用聚合函数:
count(字段)
:统计记录数(count(*)
统计所有记录,count(字段)
排除该字段为空的记录);sum(字段)
:计算数值字段的总和;avg(字段)
:计算数值字段的平均值;max(字段)
:获取字段的最大值;min(字段)
:获取字段的最小值。
示例:
- 统计
blog_article
表的文章总数:select count(*) as article_total from blog_article; -- as 给结果起别名
- 统计作者“小明”的文章数量:
select count(*) as xiaoming_articles from blog_article where author = '小明';
(7)多表连接查询(left join/inner join)
当数据分散在多张表时,需通过“关联字段”(如主键和外键)连接查询。
语法(以两表为例):
-- 内连接(只查两表中匹配的记录)
select 字段列表 from 表1 inner join 表2 on 表1.关联字段 = 表2.关联字段;-- 左连接(查左表所有记录,右表匹配不到的字段显示null)
select 字段列表 from 表1 left join 表2 on 表1.关联字段 = 表2.关联字段;
示例:假设有blog_article
(文章表,含category_id
关联分类表)和blog_category
(分类表,含id
和category_name
),查询文章标题和对应的分类名称:
select a.title, c.category_name
from blog_article a -- a是blog_article的别名
left join blog_category c -- c是blog_category的别名
on a.category_id = c.id; -- 关联条件:文章的分类ID=分类表的ID
3. 修改数据(Update)
语法:
update 表名 set 字段1=值1, 字段2=值2, ..., 字段n=值n [where 条件];
警告:必须加where
条件!否则会修改表中所有记录,无法恢复!
示例:将blog_article
表中标题为“MySQL基础指令”的文章作者改为“张三”:
update blog_article
set author = '张三'
where title = 'MySQL基础指令';
4. 删除数据(Delete)
语法:
delete from 表名 [where 条件];
警告:
- 必须加
where
条件!否则会删除表中所有数据; - 删除数据后,自增字段(如
id
)的序列不会重置(若需重置,需用truncate
,但truncate
会删除表结构后重建,更彻底)。
示例:删除blog_article
表中作者为“匿名作者”且创建时间在2024年5月1日前的文章:
delete from blog_article
where author = '匿名作者' and create_time < '2024-05-01';
补充:清空表数据(保留表结构,重置自增序列):
truncate table 表名; -- 相当于“删除表+重建表”,速度比delete快,但无法恢复
七、用户与权限管理指令
在多用户场景下,需创建不同权限的用户(如开发、测试、只读用户),避免使用root用户直接操作。
1. 创建用户
语法:
create user '用户名'@'主机地址' identified by '密码';
主机地址
:%
表示允许从任意主机连接,localhost
仅允许本地连接,192.168.1.%
允许某网段连接。
示例:创建用户dev_user
,允许从任意主机连接,密码为Dev@123456
:
create user 'dev_user'@'%' identified by 'Dev@123456';
2. 授予权限
语法:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机地址';
- 常用权限:
- 全部权限:
all privileges
; - 数据操作权限:
select
(查询)、insert
(新增)、update
(修改)、delete
(删除); - 数据库管理权限:
create
(创建)、drop
(删除)、alter
(修改);
- 全部权限:
数据库名.表名
:*.*
表示所有数据库的所有表,blog_db.*
表示blog_db
库的所有表,blog_db.blog_article
表示指定表。
示例:授予dev_user
对blog_db
库所有表的查询、新增、修改权限:
grant select, insert, update on blog_db.* to 'dev_user'@'%';
3. 查看用户权限
语法:
show grants for '用户名'@'主机地址';
示例:查看dev_user
的权限:
show grants for 'dev_user'@'%';
4. 撤销权限
语法:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机地址';
示例:撤销dev_user
对blog_db
库的修改权限:
revoke update on blog_db.* from 'dev_user'@'%';
5. 删除用户
语法:
drop user '用户名'@'主机地址';
示例:删除dev_user
用户:
drop user 'dev_user'@'%';
八、其他实用指令
1. 查看MySQL版本
select version();
2. 刷新权限
修改用户权限后,需刷新权限才能生效:
flush privileges;
3. 查看当前登录用户
select user();
总结
MySQL基础指令围绕“数据库-表-数据-用户”四大核心展开,掌握这些指令能满足日常开发80%以上的操作需求。核心要点总结如下:
- 操作逻辑:先连接数据库→选择数据库→操作表→操作数据,避免跨库误操作;
- 安全注意:
drop
(删除库/表)、delete
(删除数据)、update
(修改数据)必须加条件,谨慎使用; - 查询技巧:多表查询用
join
,分页用limit
,排序用order by
,聚合用count/sum
等函数; - 权限管理:避免用root用户直接操作业务库,按“最小权限原则”创建用户(如只读用户仅授予
select
权限)。
建议大家结合实际场景多动手练习(如创建一个博客数据库,模拟文章、分类、评论表的增删改查),熟悉指令的使用细节(如字符集、约束条件的影响)。后续可进一步学习索引优化、事务、存储过程等进阶知识,让MySQL操作更高效、安全。