MySQL 数据库管理
文章目录
- [MySQL 数据库管理](#MySQL 数据库管理)
- 前言
- 一、数据库基本操作
-
- [1. 查看数据库信息](#1. 查看数据库信息)
- [2. 切换数据库](#2. 切换数据库)
- [3. 查看数据库中的表](#3. 查看数据库中的表)
- [4. 查看表结构](#4. 查看表结构)
- 二、常用数据类型
- 三、数据库文件存储结构
-
- [1. 核心数据目录](#1. 核心数据目录)
- [2. 不同存储引擎的表文件对比](#2. 不同存储引擎的表文件对比)
-
- [(1)InnoDB 引擎(默认,推荐)](#(1)InnoDB 引擎(默认,推荐))
- [(2)MyISAM 引擎(非默认,查询快但无事务)](#(2)MyISAM 引擎(非默认,查询快但无事务))
- [四、SQL 语句分类](#四、SQL 语句分类)
- [五、DDL 操作(数据库和表管理)](#五、DDL 操作(数据库和表管理))
-
- [1. 创建数据库](#1. 创建数据库)
- [2. 创建数据表](#2. 创建数据表)
- [3. 修改表结构(ALTER)](#3. 修改表结构(ALTER))
- [4. 删除表/数据库](#4. 删除表/数据库)
- [六、DML 操作(表数据管理)](#六、DML 操作(表数据管理))
-
- [1. 插入数据(INSERT)](#1. 插入数据(INSERT))
- [2. 更新数据(UPDATE)](#2. 更新数据(UPDATE))
- [3. 删除数据(DELETE)](#3. 删除数据(DELETE))
- [七、DQL 操作(数据查询)](#七、DQL 操作(数据查询))
-
- [1. 基础查询](#1. 基础查询)
- [2. 限制查询结果(分页)](#2. 限制查询结果(分页))
- 八、表高级操作
-
- [1. 临时表](#1. 临时表)
- [2. 克隆表(表备份)](#2. 克隆表(表备份))
- 九、用户管理
-
- [1. 创建用户](#1. 创建用户)
- [2. 查看用户](#2. 查看用户)
- [3. 修改密码/删除用户](#3. 修改密码/删除用户)
- 十、用户授权管理
-
- [1. 授予权限(GRANT)](#1. 授予权限(GRANT))
- [2. 查看/撤销权限](#2. 查看/撤销权限)
- 十一、常用权限说明
- 总结
前言
一、数据库基本操作
数据库基本操作是MySQL管理的入门基础,核心作用是定位、查看数据库与表资源,为后续数据增删改查铺路,操作逻辑围绕"确认资源→切换上下文"展开。
1. 查看数据库信息
-
命令 :
SHOW DATABASES; -
用途:列出当前MySQL服务器中所有已创建的数据库,明确可操作的数据库范围(含系统自带库与自定义业务库)。
-
案例(带注释) :
sql-- 执行命令查看所有数据库 SHOW DATABASES; -- 执行结果示例(系统库+自定义库) -- +--------------------+ -- | Database | -- +--------------------+ -- | information_schema | -- 系统库:存储数据库元数据(如表结构、字段类型),不可修改 -- | mysql | -- 系统库:存储用户权限、登录信息,核心系统库,禁止删除 -- | szsx_school | -- 自定义业务库:之前创建的"数字实训学校"库,后续操作主要围绕此库 -- | test | -- 系统默认测试库:可临时用于测试,不建议存储正式数据 -- +--------------------+ -
关键提示 :系统库(
information_schema、mysql)是MySQL运行的基础,切勿删除或随意修改,避免数据库崩溃。
2. 切换数据库
-
命令 :
USE 数据库名; -
用途:将当前操作"上下文"切换到指定数据库,后续所有表操作(建表、插数据等)均默认在该库下执行,避免跨库操作错误。
-
案例(带注释) :
sql-- 切换到自定义业务库"szsx_school" USE szsx_school; -- 执行结果:Database changed(提示切换成功) -- 可选:验证当前所在数据库,避免"忘记切换库"导致操作错误 SELECT DATABASE(); -- 验证结果: -- +---------------+ -- | DATABASE() | -- +---------------+ -- | szsx_school | -- 确认当前已在目标库中 -- +---------------+
3. 查看数据库中的表
- 命令 :
- 查看当前库的表:
SHOW TABLES; - 查看指定库的表(无需切换库):
SHOW TABLES IN 数据库名;
- 查看当前库的表:
- 用途 :确认目标数据库中已存在的表,避免操作"不存在的表"导致报错(如
ERROR 1146: Table doesn't exist)。
4. 查看表结构
- 命令 :
DESCRIBE 表名;(缩写:DESC 表名;) - 用途:查看表的字段名、数据类型、约束条件(是否为空、主键等),是后续"插入数据""修改字段"的前提(需匹配字段规则)。
二、常用数据类型
数据类型决定字段存储的数据格式、范围与占用空间,选择合适类型可减少存储浪费、保证数据准确性,核心需区分"数值型""字符型""精确数值型"三类常用类型。
| 数据类型 | 说明 | 案例(带注释) |
|---|---|---|
INT |
整型,存储整数(如ID、年龄),4字节,取值范围:-2147483648~2147483647 | -- 用INT存储学生ID(唯一标识,非空) CREATE TABLE student ( id INT NOT NULL PRIMARY KEY, -- 学生ID:整数,非空,主键(唯一不重复) age INT -- 年龄:整数,允许空(如未填写年龄的学生) ); |
CHAR(n) |
固定长度字符,n为长度(0-255),不足补空格,适合固定长度数据(如身份证号) | -- 用CHAR(18)存储身份证号(固定18位,无长度变化) CREATE TABLE user_info ( id_card CHAR(18) NOT NULL, -- 身份证号:固定18字符,非空(必须填写) name CHAR(10) -- 姓名:最多10字符,不足补空格(如"张三"补8个空格) ); |
VARCHAR(n) |
可变长度字符,n为最大长度(0-65535),仅占实际长度空间,适合可变长度数据 | -- 用VARCHAR(50)存储家庭地址(长度不固定,如"北京""上海市浦东新区") CREATE TABLE user_info ( address VARCHAR(50) -- 地址:最大50字符,实际长度随内容变化("北京"占2字符,不浪费空间) ); |
DECIMAL(p,s) |
精确数值型,p=总长度(整数+小数),s=小数位,适合金额、精确分数(无误差) | -- 用DECIMAL(10,2)存储员工工资(总长度10,小数位2,如5000.00、12345.67) CREATE TABLE salary ( emp_id INT, monthly_salary DECIMAL(10,2) -- 月薪:精确到分(无浮点误差,避免"99.99变成99.98") ); |
- 核心区别 :
FLOAT/DOUBLE(浮点型)适合非精确场景(如体育分数),DECIMAL适合精确场景(如金额);CHAR适合固定长度,VARCHAR适合可变长度。
三、数据库文件存储结构
MySQL的数据以文件形式存储在指定目录,不同存储引擎(MyISAM、InnoDB)的文件格式不同,直接影响数据备份、迁移效率,InnoDB为当前默认引擎(支持事务、行锁)。
1. 核心数据目录
- 默认路径 :
/usr/local/mysql/data(源码编译安装路径,可通过SHOW VARIABLES LIKE 'datadir';查询实际路径)。 - 存储逻辑:每个数据库对应数据目录下的一个"子目录"(子目录名=数据库名),每个表在对应子目录下生成专属文件。
2. 不同存储引擎的表文件对比
(1)InnoDB 引擎(默认,推荐)
-
文件组成 :1个表对应2个文件(
.frm表结构 +.ibd数据+索引),无需额外索引文件,管理更简洁。 -
案例(带注释) :
sql-- 1. 切换到目标库 USE szsx_school; -- 2. 创建InnoDB引擎的表(默认引擎,可省略ENGINE=InnoDB) CREATE TABLE student_innodb ( id INT NOT NULL PRIMARY KEY, -- 主键id,唯一标识记录 name CHAR(10) NOT NULL -- 姓名,非空 ); -- 3. 插入一条测试数据 INSERT INTO student_innodb VALUES(1, '李四'); -- 4. 查看数据目录下的表文件(Linux终端执行,非MySQL命令) ls /usr/local/mysql/data/szsx_school/ | grep student_innodb -- 执行结果: -- student_innodb.frm -- 存储表结构(记录id INT、name CHAR(10)等定义) -- student_innodb.ibd -- 存储表数据(李四的记录)+ 索引(id字段的索引,加速查询) -
关键优势 :
.ibd文件独立存储单表数据,迁移表时直接复制.frm和.ibd即可,无需关联其他文件。
(2)MyISAM 引擎(非默认,查询快但无事务)
- 文件组成 :1个表对应3个文件(
.frm表结构 +.MYD数据 +.MYI索引),查询效率高但不支持事务,适合只读场景(如日志表)。
四、SQL 语句分类
SQL按功能分为4类,覆盖"建结构、操数据、查数据、管权限"全流程,每类语句有明确的使用场景和语法规则。
| 分类 | 功能说明 | 常用语句及案例(带注释) |
|---|---|---|
| DDL(数据定义语言) | 创建/修改/删除数据库/表等"结构",操作后永久改变数据库结构 | -- 创建表(DDL核心操作,定义表结构) CREATE TABLE yjs0805 ( id INT NOT NULL PRIMARY KEY, -- 主键id,非空 name CHAR(10) NOT NULL -- 姓名,非空 ); -- 修改表名(DDL) ALTER TABLE yjs0805 RENAME yjs0903; -- 将表名从yjs0805改为yjs0903 |
| DML(数据操纵语言) | 增删改表中的"数据",不改变表结构,仅操作行记录 | -- 更新数据(DML,需加WHERE条件,否则更新所有行) UPDATE yjs0805 SET name='张三丰' -- 将姓名改为"张三丰" WHERE id=1; -- 仅更新id=1的记录(不加WHERE会改所有姓名,慎操作) |
| DQL(数据查询语言) | 从表中"查询"数据,不修改任何内容,仅返回结果 | -- 带条件+限制的查询(DQL常用场景,分页查询) SELECT id, name FROM yjs0805 WHERE score>60 -- 仅查成绩及格的记录 LIMIT 0, 10; -- 从第0行开始,查10条(第1页数据) |
| DCL(数据控制语言) | 管理用户"权限"(授予/撤销)和事务(提交/回滚),确保数据安全 | -- 授予权限(DCL,控制用户操作范围) GRANT SELECT ON szsx_school.* TO 'zhangsan'@'localhost' -- 给"zhangsan"本地用户 IDENTIFIED BY 'abc123'; -- 密码"abc123",仅授予查询权限(无修改/删除权限) |
五、DDL 操作(数据库和表管理)
DDL是"定义数据库结构"的核心操作,包括"创建、删除、修改"三类,操作需谨慎(删除后无法恢复),推荐加IF EXISTS/IF NOT EXISTS避免报错。
1. 创建数据库
-
命令 :
CREATE DATABASE [IF NOT EXISTS] 数据库名; -
案例(带注释) :
sql-- 创建"数字实训学校"数据库,加IF NOT EXISTS避免"数据库已存在"报错 CREATE DATABASE IF NOT EXISTS szsx_school; -- 执行结果: -- 若不存在:Query OK, 1 row affected (0.00 sec)(创建成功) -- 若已存在:Query OK, 1 row affected, 1 warning (0.00 sec)(警告但不报错,更安全)
2. 创建数据表
-
命令格式 :
sqlCREATE TABLE 表名 ( 字段1 数据类型 [约束条件], 字段2 数据类型 [约束条件], PRIMARY KEY (主键字段) ); -
案例(带注释) :
sql-- 切换到目标库 USE szsx_school; -- 创建"研究生0805班"表,包含常用约束 CREATE TABLE yjs0805 ( id INT NOT NULL AUTO_INCREMENT, -- 学号:自增长(插入时无需手动填值,自动从1递增) name CHAR(10) NOT NULL, -- 姓名:非空(必须填,不填会报错) score DECIMAL(5,2) DEFAULT 0.00, -- 成绩:默认0.00(不填时自动设为0,避免NULL) passwd CHAR(48) DEFAULT PASSWORD('123456'), -- 密码:默认加密"123456"(PASSWORD()函数加密存储,安全) PRIMARY KEY (id) -- 设id为主键(唯一标识记录,避免重复插入相同id) );
3. 修改表结构(ALTER)
-
常用操作:修改表名、增加字段、删除字段、修改字段类型。
-
案例(带注释) :
sql-- 给yjs0805表增加"年龄"字段(ALTER的常用场景) ALTER TABLE yjs0805 ADD age INT NOT NULL DEFAULT 18; -- 新增age字段:整数,非空,默认18(已有数据会自动填18) -- 查看修改后的表结构,确认字段已添加 DESC yjs0805;
4. 删除表/数据库
- 命令 :
- 删除表:
DROP TABLE [IF EXISTS] 表名; - 删除数据库:
DROP DATABASE [IF EXISTS] 数据库名;
- 删除表:
- 警告:删除操作会永久删除表/库的"结构+数据",无恢复机制,操作前务必备份数据。
六、DML 操作(表数据管理)
DML用于操作表中的"行记录",核心是"增、删、改",操作时需注意"条件约束"(避免误操作全表数据),支持事务回滚(InnoDB引擎)。
1. 插入数据(INSERT)
-
命令格式 :
INSERT INTO 表名(字段1, 字段2, ...) VALUES (值1, 值2, ...); -
案例(带注释) :
sql-- 向yjs0805表插入一条学生数据(字段与值一一对应) INSERT INTO yjs0805(id, name, score) VALUES(1, '张三', 88.5); -- 字段顺序:id→name→score,值类型需匹配(id是INT,填1;score是DECIMAL,填88.5) -- 执行结果:Query OK, 1 row affected (0.00 sec)(插入1条数据成功) -- 查看插入结果(用DQL验证) SELECT * FROM yjs0805 WHERE id=1;
2. 更新数据(UPDATE)
- 命令格式 :
UPDATE 表名 SET 字段1=值1[, 字段2=值2] WHERE 条件; - 关键提示 :
WHERE条件是核心,不加条件会更新"全表数据"(如UPDATE yjs0805 SET name='李四'会改所有姓名)。
3. 删除数据(DELETE)
- 命令格式 :
DELETE FROM 表名 WHERE 条件; - 与TRUNCATE的区别 :
DELETE可加条件、支持回滚(删除后可恢复),TRUNCATE仅清空全表、不支持回滚(速度更快)。
七、DQL 操作(数据查询)
DQL是MySQL中最常用的操作,核心是SELECT语句,通过"条件筛选、结果限制、字段选择"获取所需数据,不修改任何数据。
1. 基础查询
-
命令格式 :
- 指定字段:
SELECT 字段1, 字段2 FROM 表名 WHERE 条件; - 所有字段:
SELECT * FROM 表名 WHERE 条件;(不推荐,冗余字段会降低查询效率)。
- 指定字段:
-
案例(带注释) :
sql-- 查询yjs0805表中"成绩≥80且姓名含'张'"的学生,仅返回id、name、score SELECT id, name, score FROM yjs0805 WHERE score >= 80 AND name LIKE '%张%'; -- 条件:成绩≥80,姓名模糊匹配"张"(如"张三""张三丰") -- 执行结果示例: -- +----+--------+-------+ -- | id | name | score | -- +----+--------+-------+ -- | 1 | 张三 | 88.5 | -- +----+--------+-------+
2. 限制查询结果(分页)
- 命令 :
SELECT ... LIMIT 起始行, 查询条数;(起始行从0开始)。 - 用途:分页展示数据(如网页每页显示10条数据),避免一次性查询大量数据导致性能问题。
八、表高级操作
针对"临时数据存储""表备份"等场景,提供临时表、克隆表两种高级操作,简化数据处理流程。
1. 临时表
- 命令 :
CREATE TEMPORARY TABLE 表名 (...); - 特性:仅存在于当前MySQL连接,连接关闭后自动销毁,不占用永久存储,适合存储"中间计算结果"。
2. 克隆表(表备份)
-
核心场景:复制表的"结构+数据"用于备份,避免原表数据丢失。
-
案例(带注释) :
sql-- 方法:直接复制表结构+数据(一步完成,适合快速备份) CREATE TABLE yjs0805_bak -- 新表名(加bak标识"备份表",便于识别) AS SELECT * FROM yjs0805; -- 复制yjs0805表的"所有结构+所有数据" -- 验证克隆结果:查看备份表的数据 SELECT * FROM yjs0805_bak; -- 结果与yjs0805完全一致,实现数据备份(原表数据修改不影响备份表)
九、用户管理
MySQL通过"用户名+来源地址"唯一标识一个用户,用户管理包括"创建、查看、修改密码、删除",核心是控制"谁能登录数据库"。
1. 创建用户
-
命令格式 :
CREATE USER '用户名'@'来源地址' IDENTIFIED BY '密码'; -
案例(带注释) :
sql-- 创建"zhangsan"用户,仅允许本地登录(localhost),密码"abc123" CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY 'abc123'; -- 密码明文输入,MySQL会自动加密存储(不在表中存明文) -- 关键参数说明: -- 'localhost':仅允许在数据库所在服务器本地登录(无法远程登录) -- '%':允许任意IP登录(如'zhangsan'@'%',适合远程办公场景,需注意安全)
2. 查看用户
-
命令 :
sqlUSE mysql; -- 切换到系统库(用户信息存储在mysql库的user表中) SELECT User, Host, authentication_string FROM user; -- 查看用户名、来源地址、加密后的密码
3. 修改密码/删除用户
- 修改当前用户密码 :
SET PASSWORD = PASSWORD('新密码'); - 删除用户 :
DROP USER '用户名'@'来源地址';(需同时指定用户名和来源地址,避免误删)。
十、用户授权管理
授权管理控制"用户能操作哪些数据库/表",核心是"最小权限原则"(仅授予必要权限,避免过度授权导致数据泄露)。
1. 授予权限(GRANT)
-
命令格式 :
GRANT 权限列表 ON 数据库.表 TO '用户名'@'来源地址'; -
案例(带注释) :
sql-- 给"zhangsan"本地用户授予"szsx_school库所有表"的"查询权限"(最小权限原则) GRANT SELECT -- 授予的权限:仅查询(无修改、删除权限,确保数据安全) ON szsx_school.* -- 权限范围:szsx_school库的所有表(*表示所有表) TO 'zhangsan'@'localhost'; -- 授权对象:之前创建的本地用户zhangsan -- 刷新权限,确保授权立即生效 FLUSH PRIVILEGES;
2. 查看/撤销权限
- 查看权限 :
SHOW GRANTS FOR '用户名'@'来源地址'; - 撤销权限 :
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'来源地址';(与授予权限的范围、权限类型一致)。
十一、常用权限说明
| 权限名称 | 功能说明 |
|---|---|
| SELECT | 查询数据 |
| INSERT | 插入数据 |
| UPDATE | 修改数据 |
| DELETE | 删除数据(风险较高,非核心用户不建议授予) |
| CREATE | 创建数据库/表 |
| DROP | 删除数据库/表(风险极高,仅管理员可使用) |
| INDEX | 为表建立索引(加速查询,需配合表操作权限) |
| ALTER | 修改表结构(如添加字段、修改数据类型) |
| EXECUTE | 执行存储过程 |
| CREATE VIEW | 创建视图(基于表的虚拟数据集) |
| SHOW VIEW | 查看视图的定义 |
| CREATE ROUTINE | 创建存储过程/函数 |
| ALTER ROUTINE | 修改或删除存储过程/函数 |
| EVENT | 创建、修改或删除事件(用于定时执行任务) |
| TRIGGER | 创建触发器(表数据变更时自动执行指定操作) |
| ALL PRIVILEGES | 所有权限(仅授予数据库管理员,普通用户禁止) |
总结
MySQL 数据库管理是 "结构定义、数据操作、安全管控" 三者结合的体系:从基础的数据库 / 表查看、切换操作入门,通过数据类型与存储引擎的选择搭建合理的表结构(优先用 InnoDB 保障事务与安全);以 SQL 语句为工具,用 DDL 定义结构、DML 操作数据、DQL 获取信息,同时借助临时表、克隆表等高级操作提升效率;而用户管理与权限控制是数据安全的核心 ------ 遵循 "最小权限原则",仅授予必要权限,避免过度授权风险。