MySQL 数据库管理

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_schemamysql)是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. 创建数据表

  • 命令格式

    sql 复制代码
    CREATE 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. 查看用户

  • 命令

    sql 复制代码
    USE 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 获取信息,同时借助临时表、克隆表等高级操作提升效率;而用户管理与权限控制是数据安全的核心 ------ 遵循 "最小权限原则",仅授予必要权限,避免过度授权风险。

相关推荐
我科绝伦(Huanhuan Zhou)24 分钟前
深入解析Oracle 10046事件与数据库初始化引导机制
数据库·oracle
踢球的打工仔25 分钟前
mysql模糊搜索,排序,分组
数据库·mysql
无心水27 分钟前
【分布式利器:分布式ID】7、分布式数据库方案:TiDB/OceanBase全局ID实战
数据库·分布式·tidb·oceanbase·分库分表·分布式id·分布式利器
一只栖枝31 分钟前
MySQL OCP不培训,自学怎么学?
数据库·mysql·备考·考证·ocp
safestar201233 分钟前
扒开MySQL的引擎盖:InnoDB如何用B+树、缓冲池和日志系统扛起高并发
数据库·b树·mysql
VX:Fegn089535 分钟前
计算机毕业设计|基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
全栈工程师修炼指南40 分钟前
Categraf | 国产化采集器实现:SQL Server 数据库指标采集、可视化、异常告警全流程
数据库
稚辉君.MCA_P8_Java41 分钟前
在PostgreSQL中,将整数(int)转换为字符串
数据库·sql·postgresql
路边草随风1 小时前
flink 1.18 cdc 2.4.2 读 mysql binlog 写 kafka jar版本依赖
mysql·flink·kafka