欢迎光临
我们一直在努力

mysql初阶--数据库(库)的操作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

MySQL 数据库(库)的操作

目录

  • 一、本节目标
  • 二、查看数据库
  • 三、创建数据库
    • 3.1 语法
    • 3.2 示例
  • 四、字符集编码与校验(排序)规则
    • 4.1 查看支持的字符集编码
    • 4.2 查看支持的排序规则
    • 4.3 不同字符集与排序规则的影响
    • 4.4 查看系统默认字符集和排序规则
    • 4.5 创建数据库时指定字符集和校验规则
  • 五、查看创建语句
  • 六、修改数据库
  • 七、删除数据库
  • 八、小结与常见坑

一、本节目标

本节围绕 MySQL 中"库(Database)"这一层级展开,学完后你应该能够:

  • 查看当前 MySQL 服务下存在哪些数据库;
  • 掌握 CREATE DATABASE 的完整语法,并能创建数据库;
  • 理解字符集(Charset)与排序规则(Collation)的区别与作用;
  • 学会查看系统支持的字符集、排序规则,以及系统默认值;
  • 能在创建数据库时显式指定字符集和排序规则;
  • 掌握查看建库语句、修改数据库属性、删除数据库的方法。
  • 前置说明:MySQL 中 DATABASE 与 SCHEMA 是同义词,CREATE DATABASE 等价于 CREATE SCHEMA,下文统一使用 DATABASE。


    二、查看数据库

    语法:

    SHOW DATABASES;

    说明:

    • 该语句不需要任何参数,执行后返回当前用户有权限看到的所有数据库名。
    • 结果中通常会出现以下几个系统自带库,不要删除:
    库名作用
    information_schema 元数据库,存放所有库、表、列、权限等结构信息
    mysql 用户、权限、存储过程等系统核心数据
    performance_schema 性能统计与监控数据
    sys 基于 performance_schema 的视图封装,便于运维查看

    补充: 如果想按条件过滤,可以用 LIKE:

    SHOW DATABASES LIKE 'test%';


    三、创建数据库

    3.1 语法

    CREATE DATABASE [IF NOT EXISTS] 数据库名
    [DEFAULT] CHARACTER SET 字符集名
    [DEFAULT] COLLATE 排序规则名;

    要点解读:

    • IF NOT EXISTS:可选子句。加上它,如果同名数据库已存在,则不报错、直接跳过;不加则重复创建会抛出 ERROR 1007。
    • 数据库名:建议与业务相关,使用小写字母、数字和下划线,避免使用 MySQL 保留字(如 order、group、select)。若必须使用,需用反引号包裹,如 CREATE DATABASE `order`;
    • CHARACTER SET:指定字符集,决定能存储哪些字符(如中文、emoji)。
    • COLLATE:指定排序规则,决定字符串比较和排序的规则。
    • 若两者都不指定,则使用系统默认值(见第四节)。

    3.2 示例

    示例 1:最简创建(使用系统默认字符集)

    CREATE DATABASE db01;

    示例 2:判断不存在再创建(推荐写法)

    CREATE DATABASE IF NOT EXISTS db02;

    示例 3:指定字符集与排序规则

    CREATE DATABASE db03
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_general_ci;

    示例 4:验证是否创建成功

    SHOW DATABASES LIKE 'db0%';

    注意:CREATE DATABASE 只是建库,此时库是空的。要操作表,需要先切库:

    USE db01;

    之后执行的建表语句才会落到 db01 中。


    四、字符集编码与校验(排序)规则

    这是本节最容易被忽略、但踩坑最多的部分。

    4.1 查看支持的字符集编码

    SHOW CHARACTER SET;

    结果中常用到的有:

    字符集说明
    utf8 MySQL 中的"阉割版" UTF-8,最多 3 字节,无法存储 emoji
    utf8mb4 完整 UTF-8,最多 4 字节,推荐使用
    latin1 单字节编码,不支持中文,是 MySQL 早期版本的默认值
    gbk / gb2312 中文编码,兼容性差,不推荐新项目使用

    4.2 查看支持的排序规则

    SHOW COLLATION;

    也可以只看某个字符集对应的排序规则:

    SHOW COLLATION LIKE 'utf8mb4%';

    常见的排序规则:

    排序规则含义
    utf8mb4_general_ci 通用排序,ci = case insensitive(不区分大小写)
    utf8mb4_bin 按二进制比较,区分大小写和尾部空格
    utf8mb4_unicode_ci 基于 Unicode 标准排序,多语言排序更准确
    utf8mb4_0900_ai_ci MySQL 8.0 引入,基于 Unicode 9.0,性能与准确度更优

    ci(case insensitive)不区分大小写;cs(case sensitive)与 bin 区分大小写。

    4.3 不同字符集与排序规则的影响

    字符集影响"能存什么":

    — utf8 下插入 emoji 会报错或变成乱码
    INSERT INTO t1 VALUES ('😀');
    — ERROR 1366: Incorrect string value

    — 改为 utf8mb4 后即可正常存储

    排序规则影响"怎么比较和排序":

    — general_ci:不区分大小写,结果中 'A' 和 'a' 视为相同
    SELECT 'A' = 'a'; — 1

    — bin:区分大小写
    SELECT BINARY 'A' = 'a'; — 0

    实际影响体现在:

  • 唯一索引冲突:在 utf8mb4_general_ci 下,abc 与 ABC 被视为重复值,无法同时插入;在 utf8mb4_bin 下则可以。
  • 查询结果差异:WHERE name = 'Tom' 可能匹配出 tom、TOM。
  • 排序顺序差异:不同 collation 下 ORDER BY 的结果顺序可能不同。
  • 4.4 查看系统默认字符集和排序规则

    SHOW VARIABLES LIKE 'character_set_server';
    SHOW VARIABLES LIKE 'collation_server';

    也可以一条语句同时查看:

    SHOW VARIABLES LIKE '%character_set%';
    SHOW VARIABLES LIKE '%collation%';

    层级关系(由大到小,后者可被前者继承):

    服务器(server) → 数据库(database) → 表(table) → 列(column)

    创建数据库时若不指定,就继承服务器级默认值;建表时若不指定,就继承数据库级默认值。

    4.5 创建数据库时指定字符集和校验规则

    CREATE DATABASE db04
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_general_ci;

    验证设置是否生效:

    SHOW CREATE DATABASE db04;

    最佳实践:新建数据库时始终显式指定 utf8mb4 与 utf8mb4_general_ci(或 8.0 环境下的 utf8mb4_0900_ai_ci),不要依赖默认值。否则在 latin1 默认值的旧版本 MySQL 上,插入中文会出现乱码。


    五、查看创建语句

    语法:

    SHOW CREATE DATABASE 数据库名;

    示例:

    SHOW CREATE DATABASE db04;

    输出示例:

    CREATE DATABASE `db04` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */

    解读:

    • 返回的是当初创建该库的完整 DDL 语句。
    • /*!40100 … */ 是 MySQL 的版本条件注释:只有版本号大于等于 4.01.00 时,其中的语句才会被执行;低版本会把它当普通注释忽略。这样做的目的是保证脚本在不同版本间的兼容性。
    • 该语句可以直接复制出来,用于在其他环境重建同名数据库。

    六、修改数据库

    语法:

    ALTER DATABASE 数据库名
    [DEFAULT] CHARACTER SET 字符集名
    [DEFAULT] COLLATE 排序规则名;

    示例:

    ALTER DATABASE db01
    DEFAULT CHARACTER SET utf8mb4
    DEFAULT COLLATE utf8mb4_general_ci;

    验证:

    SHOW CREATE DATABASE db01;

    重要提醒:

  • ALTER DATABASE 只能修改字符集和排序规则,不能修改数据库名。要改名,只能新建库 + 迁移数据 + 删除旧库。
  • 修改数据库的字符集,不会影响已存在的表。已有表仍保持原来的字符集,需要单独对表执行 ALTER TABLE … CONVERT TO CHARACTER SET utf8mb4;
  • 修改后,新建的表才会继承新的默认字符集。

  • 七、删除数据库

    语法:

    DROP DATABASE [IF EXISTS] 数据库名;

    示例:

    DROP DATABASE db02;

    说明:

    • IF EXISTS:可选。加上后,若库不存在则只产生一条 warning 而不报错;不加则抛出 ERROR 1008。
    • 该操作不可回滚,会连同库中所有的表、数据、索引、视图、存储过程一并永久删除。
    • 删除前建议先备份:

    mysqldump -u root -p –databases db02 > db02_backup.sql

    • 删除后当前会话若正处于该库中,需要重新 USE 到其他库,否则后续语句会报错。

    八、小结与常见坑

    操作语句易错点
    查看库 SHOW DATABASES; 系统库不要删
    创建库 CREATE DATABASE IF NOT EXISTS 库名 …; 不加 IF NOT EXISTS 重复执行会报错
    切库 USE 库名; 忘记切库导致表建到了别的库
    查看建库语句 SHOW CREATE DATABASE 库名; 注意版本条件注释 /*!40100 … */
    修改库 ALTER DATABASE 库名 …; 不能改名;不影响已有表
    删除库 DROP DATABASE IF EXISTS 库名; 不可回滚,先备份

    三条铁律:

  • 建库时永远显式写 DEFAULT CHARACTER SET utf8mb4,避免中文和 emoji 乱码。
  • 生产环境删库前必须先备份。
  • 库名使用小写加下划线,避开保留字,跨平台(Windows/Linux 表名大小写敏感性不同)更安全。
  • 赞(0)
    未经允许不得转载:171主机测评 » mysql初阶--数据库(库)的操作
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址