MySQL8.0 从零通关核心操作手册(Ubuntu实战版)

环境说明

操作系统:ubuntu

数据库版本:mysql 8.0

服务管理:service 命令(适配非 systemd 容器环境)

登录方式:

  • 常规登录:mysql -u root -p

  • 本机免密登录:sudo mysql

一、SQL 语言四大分类

分类 全称 核心作用 常用命令
ddl 数据定义语言 定义、修改、删除数据库结构(库、表、索引) create、alter、drop、truncate、rename
dml 数据操作语言 操作数据表中的具体行数据(增删改查) insert、select、update、delete
dcl 数据控制语言 管理数据库用户、分配与撤销权限 create user、alter user、drop user、grant、revoke
tcl 事务控制语言 管理数据库事务,保证数据一致性 commit、rollback、savepoint

记忆口诀

  • ddl → 动结构(库、表的框架形状)

  • dml → 动数据(表中的行记录数据)

  • dcl → 动权限(控制用户访问操作权限)

二、数据库与表操作(ddl 语句)

1. 数据库基础操作

-- 查看所有数据库

show databases;

-- 创建数据库

create database 数据库名 ;

-- 切换/选中指定数据库

use 数据库名; -- 查看当前正在使用的数据库 select database();

-- 删除数据库

drop database 数据库名;

2. 数据表基础操作

-- 查看当前库下所有数据表

show tables;

-- 通用建表语法(列名 + 数据类型 + 约束)

create table 表名 ( 列1 数据类型 约束, 列2 数据类型 约束, ... );

-- 常用字段约束说明

-- primary key 主键,唯一且非空,一张表仅一个主键

-- not null 字段不能为空

-- auto_increment 整数类型自增,一般搭配主键使用

-- default 为字段设置默认值

-- 实战示例:

创建 students 学生表 create table students ( id int primary key auto_increment, name varchar(50) not null, age int, grade varchar(10), city varchar(50) default '未知' );

-- 快速查看表结构(字段、类型、约束)

desc 表名;

-- 完整查看建表语句(包含字符集、索引等全部细节)

show create table 表名\g;

-- 修改表结构

-- 1. 新增字段

alter table 表名 add 列名 类型 约束;

-- 2. 修改字段(重命名+改类型+改约束)

alter table 表名 change 原列名 新列名 类型 约束;

-- 3. 删除字段

alter table 表名 drop 列名;

-- 4. 重命名数据表

rename table 旧表名 to 新表名;

-- 删除数据表

drop table 表名;

三、数据增删改查(dml 核心 curd)

1. 插入数据(insert)

sql 复制代码
-- 方式1:全列插入(严格匹配建表字段顺序,自增列填null/0)
insert into 表名 values (值1, 值2, ...);
insert into students values (null, '张三', 20, 'A', '北京');

-- 方式2:指定列插入(仅写入部分字段,其余字段用默认值/null)
insert into 表名 (列1, 列2, ...) values (值1, 值2, ...);
insert into students (name, age, grade) values ('李四', 22, 'B');

-- 方式3:set 单行插入(直观适配少量数据)
insert into 表名 set 列1=值1, 列2=值2, ...;
insert into students set name='王五', age=23, city='上海';

-- 方式4:批量插入(高效写入多行数据)
insert into students (name, age) values 
    ('赵六', 19),
    ('孙七', 21);

2. 查询数据(select,最常用语句)

sql 复制代码
-- 查询表中所有列数据
select * from 表名;

-- 查询指定列数据(推荐,精准高效)
select 列1, 列2 from 表名;

-- 带条件精准查询
select * from 表名 where 条件;

-- 常用查询条件示例
where age > 20;                -- 数值大小判断
where grade = 'A' and city = '北京';  -- 多条件同时满足
where name like '张%';         -- 模糊查询(匹配张开头)
where age between 18 and 22;   -- 区间查询

-- 结果排序(asc升序,desc降序,默认asc)
select * from 表名 order by 列名 asc|desc;

-- 限制查询结果行数(分页常用)
select * from 表名 limit 10;

-- 聚合统计查询
select count(*) from 表名;        -- 统计总行数
select avg(age) from students;    -- 计算平均年龄

3. 修改数据(update)

sql 复制代码
-- 核心规则:必须加where条件,否则修改全表数据!
update 表名 set 列1=值1, 列2=值2 where 条件;

-- 示例1:修改单字段数据
update students set age = 25 where id = 1;

-- 示例2:同时修改多个字段数据
update students set grade = 'A+', city = '深圳' where grade = 'A';

4. 删除数据(delete / truncate)

sql 复制代码
-- 精准删除指定行数据(必须加where)
delete from 表名 where 条件;

-- 示例:删除id=3的学生数据
delete from students where id = 3;

-- 两种清空表方式区别
delete from students;        -- 删除所有数据,保留表结构,自增id不重置,可回滚
truncate table students;     -- 清空全表,重置自增id,ddl语句,不可回滚、速度更快

四、用户与权限管理(dcl 语句)

1. 用户管理

sql 复制代码
-- 查看数据库所有用户及允许登录主机
select host, user from mysql.user;

-- 创建用户(主机参数:localhost仅本机、%任意主机、指定IP)
create user '用户名'@'主机' identified by '密码';

-- 修改用户密码
alter user '用户名'@'主机' identified by '新密码';

-- 删除指定用户
drop user '用户名'@'主机';

2. 权限分配与撤销

sql 复制代码
-- 授权语法:grant 权限 on 数据库.表 to 用户
-- 常用权限:all privileges(所有权限)、select、insert、update、delete、create、drop
grant 权限列表 on 数据库名.表名 to '用户名'@'主机';

-- 示例1:授予用户本机所有库表全部权限
grant all privileges on mydb.* to 'testuser'@'localhost';

-- 示例2:授予用户任意主机仅查询权限
grant select on mydb.* to 'testuser'@'%';

-- 查看指定用户拥有的权限
show grants for '用户名'@'主机';

-- 撤销用户权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机';

-- 刷新权限(授权/撤权后必须执行,生效配置)
flush privileges;

3. 用户切换方式

sql 复制代码
-- 退出当前mysql会话
exit;
-- 或 quit;

-- shell终端重新登录新用户
mysql -u 新用户名 -p

五、常见报错与避坑指南

报错提示 问题原因 解决方法
no database selected 未选中任何数据库,直接执行表操作 先执行 use 数据库名; 选中库
table 'xxx' doesn't exist 表名拼写错误、大小写不匹配或库选择错误 show tables; 查看正确表名,复制使用
error 2002 (hy000) mysql服务未启动或异常 sudo service mysql start 启动服务
update/delete 全表数据变更 未添加where条件,高危误操作 操作前先用select验证条件,务必加where
中文乱码 数据库字符集非utf8mb4 建库时指定 utf8mb4 字符集与排序规则
远程连接失败 mysql绑定本地IP,禁止外网访问 修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address改为0.0.0.0,重启服务

六、MySQL 服务启停管理(service 版)

sql 复制代码
# 启动mysql服务
sudo service mysql start

# 停止mysql服务
sudo service mysql stop

# 查看服务运行状态
sudo service mysql status

# 重启mysql服务(修改配置后必执行)
sudo service mysql restart

七、核心命令速查表

操作需求 核心命令
登录mysql mysql -u root -p
查看所有数据库 show databases;
切换数据库 use 数据库名;
查看当前库所有表 show tables;
查看表结构 desc 表名;
插入数据 insert into 表名(列) values(值);
查询数据 select * from 表名 where 条件;
修改数据 update 表名 set 列=值 where 条件;
删除数据 delete from 表名 where 条件;
创建用户 create user 'user'@'host' identified by 'pwd';
授予权限 grant all on 库.* to 'user'@'host';
刷新权限 flush privileges;
退出mysql exit;
相关推荐
聚美智数1 分钟前
车辆合格证OCR识别-机动车合格证识别-车辆合格证OCR‑机动车出厂证解析‑整车参数提取 API 接口介绍
数据库·经验分享
DBA_G5 分钟前
南大通用技术分享:GBase 8a数据库执行计划架构原理解析
数据库
军训猫猫头11 分钟前
C# 封装 MySQL 自动写入与查询工具类(基于 MySqlConnector)
mysql·c#·.net·wpf
QQ_216962909613 分钟前
基于SpringBoot+Vue的小生活平台的设计与实现
java·数据库·vue.js·spring boot·spring·微信小程序·生活
考虑考虑8 小时前
数据库中的EXISTS
运维·数据库·后端
Wang's Blog8 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
梦想平凡10 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
xcLeigh10 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
yume_sibai11 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
AugustRed12 小时前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j