当前位置: 首页 > news >正文

MySQL库与表的操作

MySQL 库与表的操作实战指南

本文涵盖数据库和数据表的增删改查、字符集配置、备份恢复等核心操作,所有命令均可直接复制执行。


目录

  • 第一部分:数据库(库)的操作
    • 1. 创建数据库
    • 2. 字符集与校验规则
      • 2.1 什么是字符集
      • 2.2 什么是校验规则
      • 2.3 查看系统默认配置
      • 2.4 查看 MySQL 支持的所有字符集
      • 2.5 查看 MySQL 支持的所有校验规则
      • 2.6 校验规则的实际影响(重点理解)
    • 3. 查看数据库
    • 4. 修改数据库
    • 5. 删除数据库
    • 6. 备份与恢复
      • 6.1 备份整个数据库
      • 6.2 备份指定的表
      • 6.3 同时备份多个数据库
      • 6.4 恢复数据库
    • 7. 查看连接情况
  • 第二部分:数据表(表)的操作
    • 1. 创建数据表
    • 2. 查看表结构
    • 3. 修改表结构
      • 3.1 添加新字段
      • 3.2 修改字段类型或长度
      • 3.3 修改字段名称
      • 3.4 删除字段
      • 3.5 修改表名
      • 3.6 修改字段操作对比
    • 4. 删除数据表
  • 附录:常用命令速查表
    • 数据库操作
    • 数据表操作
    • 字符集与校验规则

第一部分:数据库(库)的操作

1. 创建数据库

基本语法

CREATEDATABASE[IFNOTEXISTS]数据库名[DEFAULT]CHARACTERSET字符集名[DEFAULT]COLLATE校验规则名;

语法说明

  • CREATE DATABASE:创建数据库的关键字,必须项
  • [IF NOT EXISTS]:可选项,加上后如果数据库已存在不会报错,而是给出警告
  • CHARACTER SET:指定数据库使用的字符集,不指定则使用系统默认值
  • COLLATE:指定字符集的校验规则,不指定则使用字符集对应的默认规则

创建示例

示例 1:最简单的创建方式

CREATEDATABASEmydb1;

这条命令创建了一个名为mydb1的数据库,字符集和校验规则都采用系统默认值(通常是utf8utf8_general_ci)。

示例 2:显式指定字符集

CREATEDATABASEmydb2CHARACTERSETutf8;

示例 3:同时指定字符集和校验规则

CREATEDATABASEmydb3CHARACTERSETutf8COLLATEutf8_general_ci;

示例 4:避免重复创建时报错

CREATEDATABASEIFNOTEXISTSmydb1;

如果mydb1已经存在,不会抛出错误,而是返回一条警告信息。


2. 字符集与校验规则

2.1 什么是字符集

字符集决定了数据库能存储哪些语言的文字。常见的字符集有:

字符集说明
utf8支持中文、英文等多语言,最常用
gbk支持中文,兼容老系统
latin1只支持西欧字符,不支持中文
utf8mb4utf8 的超集,支持 emoji 表情等 4 字节字符

2.2 什么是校验规则

校验规则(Collation)决定了字符串比较和排序时的行为,最核心的差异是是否区分大小写

校验规则大小写敏感说明
utf8_general_ci不区分默认规则,查询时不区分大小写
utf8_bin区分按二进制比较,严格区分大小写

ci是 Case Insensitive 的缩写,bin表示按二进制方式比较。

2.3 查看系统默认配置

-- 查看当前默认字符集SHOWVARIABLESLIKE'character_set_database';-- 查看当前默认校验规则SHOWVARIABLESLIKE'collation_database';

2.4 查看 MySQL 支持的所有字符集

SHOWCHARSET;

2.5 查看 MySQL 支持的所有校验规则

SHOWCOLLATION;

2.6 校验规则的实际影响(重点理解)

校验规则会直接影响查询结果和排序行为,下面通过一个完整的实验来演示。

第一步:分别创建两个数据库

-- 创建使用不区分大小写规则的数据库CREATEDATABASEtest1COLLATEutf8_general_ci;-- 创建使用区分大小写规则的数据库CREATEDATABASEtest2COLLATEutf8_bin;

第二步:在两个库中分别建表并插入相同数据

-- 在 test1 中操作USEtest1;CREATETABLEperson(nameVARCHAR(20));INSERTINTOpersonVALUES('a');INSERTINTOpersonVALUES('A');INSERTINTOpersonVALUES('b');INSERTINTOpersonVALUES('B');-- 在 test2 中操作USEtest2;CREATETABLEperson(nameVARCHAR(20));INSERTINTOpersonVALUES('a');INSERTINTOpersonVALUES('A');INSERTINTOpersonVALUES('b');INSERTINTOpersonVALUES('B');

第三步:对比查询结果

不区分大小写查询(test1):

USEtest1;SELECT*FROMpersonWHEREname='a';

结果:返回aA两条记录,因为utf8_general_ci认为aA是相同的。

区分大小写查询(test2):

USEtest2;SELECT*FROMpersonWHEREname='a';

结果:只返回a一条记录,因为utf8_bin认为aA是不同的。

第四步:对比排序结果

-- 不区分大小写的排序USEtest1;SELECT*FROMpersonORDERBYname;-- 结果:a, A, b, B(小写和大写混合排列)-- 区分大小写的排序USEtest2;SELECT*FROMpersonORDERBYname;-- 结果:A, B, a, b(大写字母排在前面,因为大写字母的 ASCII 值更小)

实际开发建议:大多数业务场景使用utf8_general_ci就够了。只有在需要严格区分大小写的场景(如密码比对、验证码校验)才使用utf8_bin


3. 查看数据库

3.1 列出所有数据库

SHOWDATABASES;

3.2 查看指定数据库的创建语句

SHOWCREATEDATABASE数据库名;

这条命令会返回创建该数据库时的完整 SQL 语句,包括字符集和校验规则信息。

示例:

SHOWCREATEDATABASEmydb1;

返回结果类似:

+----------+----------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------+ | mydb1 | CREATE DATABASE `mydb1` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+----------------------------------------------------------------+

返回结果中的特殊符号说明

  • 反引号:用于包裹数据库名,防止名称与 SQL 关键字冲突
  • /*!40100 ... */:这不是注释,而是 MySQL 的版本兼容语法,表示"如果 MySQL 版本 >= 4.01,就执行这段语句"

4. 修改数据库

数据库创建后,可以修改的内容主要是字符集校验规则

语法

ALTERDATABASE数据库名[DEFAULT]CHARACTERSET新字符集名[DEFAULT]COLLATE新校验规则名;

示例:将字符集从 utf8 改为 gbk

ALTERDATABASEmydb1CHARACTERSETgbk;

验证修改是否生效:

SHOWCREATEDATABASEmydb1;

返回结果中字符集已经变成gbk


5. 删除数据库

语法

DROPDATABASE[IFEXISTS]数据库名;

示例

DROPDATABASEIFEXISTSmydb1;

删除操作的影响

执行删除后会发生以下事情:

  1. 该数据库在SHOW DATABASES结果中消失
  2. 该数据库对应的文件夹从磁盘上被删除
  3. 库中的所有表和数据全部被删除,且无法恢复

重要提醒:删除数据库是不可逆操作,生产环境务必谨慎。建议删除前先做好备份。


6. 备份与恢复

6.1 备份整个数据库

在终端(不是 MySQL 客户端)执行:

mysqldump-P3306-uroot-p123456-B数据库名>/path/to/backup.sql

参数说明

参数含义
-P3306指定 MySQL 端口号
-u root指定登录用户名
-p123456指定密码(注意-p和密码之间没有空格)
-B关键参数,表示备份整个数据库(包含建库语句)
> /path/to/backup.sql指定备份文件的保存路径

实际示例

mysqldump-P3306-uroot-p123456-Bmydb1>/home/backup/mydb1.sql

备份生成的.sql文件本质上是一系列 SQL 语句的集合,包含了建库、建表、插入数据的完整流程。

6.2 备份指定的表

mysqldump-uroot-p123456数据库名 表名1 表名2>/path/to/backup.sql

6.3 同时备份多个数据库

mysqldump-uroot-p123456-B数据库名1 数据库名2>/path/to/backup.sql

6.4 恢复数据库

在 MySQL 客户端中执行:

SOURCE/path/to/backup.sql;

注意事项:如果备份时没有使用-B参数,恢复时需要先手动创建空数据库,然后切换到该库,再执行SOURCE命令。

CREATEDATABASEmydb1;USEmydb1;SOURCE/path/to/backup.sql;

7. 查看连接情况

语法

SHOWPROCESSLIST;

示例输出

+----+------+-----------+------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+------------------+ | 2 | root | localhost | test | Sleep | 1386 | | NULL | | 3 | root | localhost | NULL | Query | 0 | NULL | show processlist | +----+------+-----------+------+---------+------+-------+------------------+

结果说明

  • Id:连接的唯一标识
  • User:连接使用的用户名
  • Host:连接来源的地址
  • db:当前使用的数据库
  • Command:当前正在执行的命令类型(Sleep表示空闲,Query表示正在执行查询)
  • Time:状态持续的时间(秒)
  • Info:正在执行的 SQL 语句

实际用途

  • 排查数据库连接慢的问题,查看是否有大量空闲连接
  • 检查是否有异常连接,如果发现不认识的用户或来源地址,可能存在安全风险

第二部分:数据表(表)的操作

1. 创建数据表

基本语法

CREATETABLE表名(字段名1数据类型[COMMENT'字段说明'],字段名2数据类型[COMMENT'字段说明'],字段名3数据类型[COMMENT'字段说明'])CHARACTERSET字符集ENGINE存储引擎;

语法说明

  • 字段名:列的名称
  • 数据类型:列存储数据的类型(如INTVARCHARDATE等)
  • COMMENT:字段的备注说明,方便团队协作理解
  • CHARACTER SET:指定表的字符集,不指定则继承数据库的字符集
  • ENGINE:指定存储引擎,常见的有InnoDB(默认)和MyISAM

创建示例

CREATETABLEusers(idINTCOMMENT'用户ID',nameVARCHAR(20)COMMENT'用户名',passwordCHAR(32)COMMENT'密码,32位MD5值',birthdayDATECOMMENT'生日')CHARACTERSETutf8ENGINEMyISAM;

存储引擎与文件的关系

不同的存储引擎在磁盘上生成的文件不同:

MyISAM 引擎(每个表生成 3 个文件):

文件作用
表名.frm存储表的结构定义
表名.MYD存储表中的数据
表名.MYI存储表的索引信息

InnoDB 引擎(默认引擎):

  • 表结构和数据存储在系统表空间中,不像 MyISAM 那样每个表独立文件
  • 支持事务、行级锁、外键等高级特性

实际开发建议:除非有特殊需求,使用默认的 InnoDB 引擎即可。


2. 查看表结构

查看表的字段信息

DESC表名;

或者使用完整写法:

DESCRIBE表名;

输出示例

+----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | password | char(32) | YES | | NULL | | | birthday | date | YES | | NULL | | +----------+-------------+------+-----+---------+-------+

各列含义

列名含义
Field字段名称
Type字段的数据类型和长度
Null是否允许为空(YES= 允许,NO= 不允许)
Key索引类型(PRI= 主键,UNI= 唯一索引,MUL= 普通索引)
Default字段的默认值
Extra额外信息(如AUTO_INCREMENT自增)

查看建表语句

SHOWCREATETABLE表名;

3. 修改表结构

在实际项目中,表结构经常需要调整,比如增删字段、修改字段类型、更改表名等。

3.1 添加新字段

ALTERTABLE表名ADD字段名 数据类型[COMMENT'说明'][AFTER已有字段名];

示例:在users表的birthday字段后面添加一个assets字段

ALTERTABLEusersADDassetsVARCHAR(100)COMMENT'图片路径'AFTERbirthday;

验证结果:

DESCusers;
+----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | password | char(32) | YES | | NULL | | | birthday | date | YES | | NULL | | | assets | varchar(100) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+

新增字段对表中已有的数据没有影响,原有记录在新字段上的值为NULL

3.2 修改字段类型或长度

ALTERTABLE表名MODIFY字段名 新数据类型;

示例:将name字段的长度从 20 改为 60

ALTERTABLEusersMODIFYnameVARCHAR(60);

3.3 修改字段名称

ALTERTABLE表名 CHANGE 旧字段名 新字段名 新数据类型;

示例:将name字段改名为xingming

ALTERTABLEusers CHANGE name xingmingVARCHAR(60);

注意CHANGE操作需要同时指定新字段名和完整的数据类型,不能省略类型。

3.4 删除字段

ALTERTABLE表名DROP字段名;

示例:删除password字段

ALTERTABLEusersDROPpassword;

重要提醒:删除字段会同时删除该字段的所有数据,操作前请确认是否需要备份。

3.5 修改表名

ALTERTABLE旧表名RENAMETO新表名;

或者省略TO

ALTERTABLE旧表名RENAME新表名;

示例:将users表改名为employee

ALTERTABLEusersRENAMETOemployee;

3.6 修改字段操作对比

操作命令能改名能改类型
MODIFYALTER TABLE 表名 MODIFY 字段 新类型;不能
CHANGEALTER TABLE 表名 CHANGE 旧名 新名 新类型;
DROPALTER TABLE 表名 DROP 字段名;删除字段删除字段

4. 删除数据表

语法

DROP[TEMPORARY]TABLE[IFEXISTS]表名1[,表名2...];

示例

-- 删除单个表DROPTABLEIFEXISTSusers;-- 同时删除多个表DROPTABLEIFEXISTSt1,t2,t3;

附录:常用命令速查表

数据库操作

操作命令
创建数据库CREATE DATABASE 数据库名;
创建数据库(避免重复报错)CREATE DATABASE IF NOT EXISTS 数据库名;
查看所有数据库SHOW DATABASES;
查看建库语句SHOW CREATE DATABASE 数据库名;
修改字符集ALTER DATABASE 数据库名 CHARACTER SET 新字符集;
删除数据库DROP DATABASE IF EXISTS 数据库名;
备份数据库mysqldump -u root -p -B 数据库名 > backup.sql
恢复数据库SOURCE /path/to/backup.sql;
查看连接SHOW PROCESSLIST;

数据表操作

操作命令
创建表CREATE TABLE 表名 (字段 类型, ...);
查看表结构DESC 表名;
查看建表语句SHOW CREATE TABLE 表名;
添加字段ALTER TABLE 表名 ADD 字段 类型 AFTER 已有字段;
修改字段类型ALTER TABLE 表名 MODIFY 字段 新类型;
修改字段名ALTER TABLE 表名 CHANGE 旧名 新名 新类型;
删除字段ALTER TABLE 表名 DROP 字段名;
修改表名ALTER TABLE 旧表名 RENAME TO 新表名;
删除表DROP TABLE IF EXISTS 表名;

字符集与校验规则

操作命令
查看默认字符集SHOW VARIABLES LIKE 'character_set_database';
查看默认校验规则SHOW VARIABLES LIKE 'collation_database';
查看支持的字符集SHOW CHARSET;
查看支持的校验规则SHOW COLLATION;

http://www.jsqmd.com/news/1132043/

相关文章:

  • 在成都买翡翠,不同段位该去哪家店
  • 3步彻底解决Sublime Text中文乱码:ConvertToUTF8插件终极解决方案
  • 9大网盘直链解析工具:开源解决方案如何提升工作效率300%
  • TD3 vs SAC vs DDPG:3 种连续控制算法在 5 个 MuJoCo 任务上的性能对比
  • openEuler 22.03 LTS 配置华为云镜像源:3步完成并验证可用性
  • GPT-4o 翻译质量评测:8篇大学英语课文英译中,BLEU得分与人工评估对比
  • C盘红了不敢乱删?这个开源工具让AI帮你判断哪些文件夹能删
  • MacBook Pro 2016-2018款屏幕排线设计缺陷深度解析:从Flexgate到服务计划
  • NVIDIA 驱动 551.86 与 CUDA 12.4 版本匹配指南:Windows 深度学习环境搭建避坑 3 要点
  • VS2019中添加md文件查看功能
  • 飞轮自驱:机器人如何以世界为食,实现永不停歇的自我进化?
  • C# GeneratedRegex:面向对象语言的“底层性能突围
  • 从零实现一个网络防火墙:包过滤与状态检测
  • DeepSeek-Translator v2 API 实战:3步调用实现《大学英语》课文批量英译中
  • 2026年想找专业靠谱的外墙保温装饰一体板供应商 看这几点就够了
  • 《Python + Streamlit + DeepSeek API 实现一个本地文档问答助手》
  • STFT 与 DWT 实战对比:Python 3.11 下 5 种窗函数对非平稳信号时频分析效果
  • SQL Server 自定义函数进阶:WITH SCHEMABINDING 与参数默认值实战解析
  • 达朗贝尔公式与特征线法:一维波动方程依赖区间与决定区域图解
  • MySQL 8.0 自定义函数实战:3种类型对比与5个业务场景代码实例
  • Dify低代码AI开发平台:从零部署到工作流实战全指南
  • 我为什么放弃Scrapy转投Playwright?爬虫框架选择的真相
  • CUDA 12.4 + cuDNN 8.9 环境配置:Windows/Linux 双系统 5 步验证法
  • Codex Windows Sandbox 启动失败:CreateProcessAsUserW failed: 2 的原因与修复
  • MatAnyone:无需绿幕的AI视频抠像神器,轻松实现专业级视频背景分离
  • Win11Debloat:Windows系统清理优化的终极免费解决方案
  • MySQL 8.0 CTE vs 子查询:5个复杂场景下的性能与可读性对比
  • 本地AI绘图新范式:Codex与Cowart插件实现指哪改哪交互式创作
  • 《数据库系统概论》第6版 vs 第5版:3大核心内容更新与SQL Server/Oracle 23版适配
  • ssm267防疫信息登记系统的设计与实现+jsp(文档+源码)_kaic