计算机应用

导航

第05周 数据库创建与MySQL数据类型

第5周 · 数据库创建与 MySQL 数据类型

装好 MySQL 之后,第一件事是"建库"。这周学怎么创建一个数据库、怎么给字段选对类型。字段类型选错,后面存数据会出各种奇怪问题,所以建库前先设计是工程规范。


一、知识点:数据库与数据表的关系

  • 数据库(Database):存放若干张表的"文件夹/容器",如 school
  • 数据表(Table):数据库里一张二维表,如 student
  • 顺序:先建库 → 再建表 → 最后插数据。库都不存在就建表会报错。

二、操作教程:创建数据库

-- 创建 school 库,指定字符集 utf8mb4、校对规则 utf8mb4_general_ci
CREATE DATABASE school
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;

-- 更稳妥的写法:库已存在就不报错
CREATE DATABASE IF NOT EXISTS school
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;

务必带 CHARACTER SET utf8mb4,否则默认字符集可能不支持完整中文(如 emoji、""等生僻字),后期改起来很麻烦。


三、操作教程:查看 / 切换 / 删除数据库

SHOW DATABASES;                              -- 查看所有数据库
USE school;                                 -- 切换到 school 库(后续操作都在它里面)
SELECT DATABASE();                          -- 查看当前所在库
DROP DATABASE school;                       -- 删除整个库(危险!库和里面的表全没)

DROP DATABASE 不可恢复,练习时确认无误再执行,考试/生产环境更要谨慎。


四、知识点:MySQL 数据类型三大类

大类 常用类型 用途
数值型 INTBIGINTDECIMALFLOAT 整数、小数
字符串型 CHARVARCHARTEXT 文本
日期时间型 DATEDATETIMETIMESTAMP 日期、时间

五、知识点:数值类型怎么选

  • INT:普通整数(约 ±21 亿),学号、年龄、数量够用。
  • BIGINT:超大整数(如订单号、主键自增到大数时)。
  • DECIMAL(M,D)精确小数,金额必须用它,例如 DECIMAL(10,2) 表示共 10 位、小数 2 位。
  • FLOAT / DOUBLE:浮点数,有精度误差,不适合金额。

金额千万别用 FLOAT!例如 0.1 + 0.2 在浮点里不等于 0.3。金额一律 DECIMAL


六、知识点:CHAR 定长 vs VARCHAR 变长(重点)

这是最常考、最易混的一对:

类型 含义 存储 适用
CHAR(n) 定长,固定占 n 个字符 不管实际多长都占 n 位,不足补空格 长度固定的,如性别 CHAR(1)、身份证 CHAR(18)
VARCHAR(n) 变长,最多 n 个字符 按实际长度存,省空间 长度不定的,如姓名 VARCHAR(20)、地址 VARCHAR(100)

示例:存"张"(1 个字) - CHAR(20):占满 20 个字符位(补 19 个空格),浪费; - VARCHAR(20):只占实际 1 个字 + 少量长度标记,省空间。

经验:长度基本固定用 CHAR,长度浮动大用 VARCHAR。姓名、地址一律 VARCHAR


七、知识点:日期时间类型区别

类型 格式 含义
DATE 2026-08-29 仅日期,无时间
DATETIME 2026-08-29 14:30:00 日期+时间,范围大
TIMESTAMP 2026-08-29 14:30:00 日期+时间,范围小,随时区变,常用于"最后修改时间"

生日、入学日期用 DATE;下单时间、操作日志用 DATETIMETIMESTAMP


八、字段类型选择原则

  1. 够用就好:如年龄用 TINYINT(0–255)比 INT 省,但教学阶段用 INT 也行。
  2. 金额用 DECIMAL:避免浮点误差。
  3. 文本用 VARCHAR:除非长度绝对固定才用 CHAR
  4. 统一字符集 utf8mb4:建库建表都指定。
  5. 见名知意:字段名用英文,如 sname 表示学生姓名。

九、综合操作:创建 student 表

USE school;

CREATE TABLE student (
  sid    INT,           -- 学号(整数)
  sname  VARCHAR(20),   -- 姓名(变长文本)
  sage   INT,           -- 年龄(整数)
  enroll DATE           -- 入学日期(仅日期)
);

建完用 DESC student; 查看表结构,确认四个字段类型符合预期。


十、易混点排查表

现象 解决方法
No database selected 建表前没 USE 库名;先切换库
中文存入乱码 建库/建表没指定 utf8mb4;统一用 utf8mb4
CHAR 和 VARCHAR 分不清 记住:定长 CHAR、变长 VARCHAR
金额算出误差 用了 FLOAT;改成 DECIMAL(M,D)
DROP DATABASE 误删 该操作不可恢复,执行前二次确认
字段太长超 VARCHAR(n) 实际长度超过 n 会截断/报错;把 n 调大

十一、小测验(自测)

  1. 创建 school 库并指定 utf8mb4 的 SQL 怎么写?为什么字符集要指定 utf8mb4?
  2. 姓名和性别分别该用 CHAR 还是 VARCHAR?为什么?
  3. 金额字段为什么不能用 FLOAT?应该用哪个类型?
  4. DATEDATETIMETIMESTAMP 三者的主要区别是什么?生日该用哪个?

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(11)  评论(0)    收藏  举报