Skip to content

MySQL 8.4 实验环境与可重复初始化 ​

← 本站索引 | 练习答案

可运行实验 ​

在专用实验实例执行:

sql
DROP DATABASE IF EXISTS mysql_course;
CREATE DATABASE mysql_course
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;
USE mysql_course;

CREATE TABLE lab_probe (
  id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  note VARCHAR(100) NOT NULL,
  created_at TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)
) ENGINE = InnoDB;

INSERT INTO lab_probe(note) VALUES ('mysql-8.4-baseline');
SELECT * FROM lab_probe;
SHOW CREATE TABLE lab_probe;

机制解释 ​

客户端把 SQL 发送给 MySQL Server;Server 负责解析、权限、优化和执行协调,InnoDB 负责页、索引、事务、锁与崩溃恢复。数据库默认字符集会成为新表的默认值,但已有对象不会因修改默认值自动重写。

SET SESSION 只影响当前连接;SET GLOBAL 影响之后新建的连接;可持久化参数还要区分运行值和重启后的值。连接池会复用会话,因此归还连接前必须恢复事务、隔离级别、时区等状态。

真实边界 ​

  • DROP DATABASE 是破坏性语句,只能在可丢弃实例执行。
  • utf8mb4_0900_ai_ci 的比较是大小写和重音不敏感;标识符或安全令牌可能需要不同排序规则或二进制类型。
  • 容器删除不代表数据卷删除;反过来,错误挂载会让重建容器后数据消失。
  • 8.4 是本课程稳定基线。9.x 的行为必须在独立环境验证。

练习 ​

  1. 新开两个客户端,在其中一个修改 SESSION time_zone,比较两个连接。
  2. 将排序规则改成大小写敏感的 utf8mb4_0900_as_cs,验证 'A' 与 'a' 的比较结果。
  3. 画出客户端、Server SQL 层和 InnoDB 的请求路径。

验收清单 ​

  • 初始化脚本可重复运行,最终表结构与数据一致。
  • 报告包含 8.4 版本、SQL mode、时区、字符集和排序规则。
  • 能用两个连接证明 SESSION 与 GLOBAL 的作用域差异。

完成后核对答案

深度加餐:实验环境也要像生产一样可复现 ​

数据库学习最怕“我这里能跑”;先固定版本、字符集、SQL 模式和初始化脚本,再讨论结果。

先做一个可观察实验 ​

sql
SELECT VERSION(), @@version_comment;
SELECT @@sql_mode, @@transaction_isolation, @@character_set_server,
       @@collation_server, @@time_zone;

CREATE DATABASE IF NOT EXISTS mvcc_lab
  CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE mvcc_lab;
CREATE TABLE IF NOT EXISTS probe (
  id BIGINT PRIMARY KEY,
  value INT NOT NULL
) ENGINE=InnoDB;

预期:每次实验都能记录版本、隔离级别和字符集;同一脚本重复执行不会因为对象已存在而失控。

原理下潜与工程边界 ​

客户端、Server 层和 InnoDB 层各有配置;SQL 模式影响隐式转换与错误行为,时区影响 TIMESTAMP/应用显示。初始化脚本要幂等、可回滚,并在实验后清理数据。

只在 GUI 中点选设置无法审计;root 账号运行应用会隐藏权限问题;不同客户端对 delimiter、自动提交和结果集展示的默认值可能不同。

反例排错路线 ​

先执行 SELECT @@autocommit、SHOW WARNINGS 和 SHOW CREATE TABLE,再比较两会话的 session 变量;结论必须附版本与变量快照。

练习加码(仍不提供答案) ​

加码:写 reset_lab.sql,重复执行三次仍得到同一 schema、索引和种子数据,并输出校验摘要。

验收时请补充:一份可复现的环境/数据前提、正常结果、失败结果以及可回滚或清理动作。

继续查阅:MySQL 8.4 参考手册(外部资料已收录于证据账本) · InnoDB 文档(外部资料已收录于证据账本)

用心记录每一步成长