MySQL 库表操作 +数据类型+ 基础概念全梳理

📅 2026/7/8 3:57:05 👁️ 阅读次数 📝 编程学习
MySQL 库表操作 +数据类型+ 基础概念全梳理

1. 引言

MySQL 作为全球最流行的开源关系型数据库之一,是后端开发、数据分析乃至全栈工程师的必备技能。无论是构建一个简单的博客系统,还是支撑亿级流量的电商平台,扎实的 MySQL 基础都是成功的基石。

本文旨在为你提供一份系统、全面的 MySQL 入门指南,聚焦于三大核心模块:

  1. 基础概念:理解数据库、表、行、列等核心术语。
  2. 数据类型:掌握如何为数据选择合适的“容器”,这是设计高效表结构的关键。
  3. 库表操作:从创建数据库到管理表结构,通过 SQL 语句实践数据定义语言(DDL)。

通过本文,你将能够独立完成数据库环境的搭建、表结构的设计与创建,并为后续的数据操作(增删改查)打下坚实基础。

2. 核心概念梳理

在动手操作之前,先明确几个核心概念,这有助于你理解后续的 SQL 语句在操作什么。

  • 数据库 (Database)
    一个数据库是一个逻辑上的容器,用于存储一组相关的数据。你可以把它想象成一个文件柜,里面存放着多个文件夹(表)。

  • 表 (Table)
    表是数据库中实际存储数据的结构,由行和列组成。它类似于 Excel 中的一个工作表。每个表都有一个唯一的名称。

  • 列 (Column) / 字段 (Field)
    表由列定义,每一列代表一种特定类型的数据(例如:id,name,age)。列定义了数据的“形状”和“类型”。

  • 行 (Row) / 记录 (Record)
    表中的每一行代表一条具体的数据记录。例如,一个users表中,每一行就是一个用户的信息。

  • 主键 (Primary Key)
    主键是表中一列或一组列,其值能唯一标识表中的每一行。主键列的值不能为 NULL,且必须唯一。通常使用id列作为主键。

  • SQL (Structured Query Language)
    结构化查询语言,是与关系型数据库通信的标准语言。它主要分为几类:

    • DDL (Data Definition Language):数据定义语言,用于定义或修改数据库和表结构。如CREATE,ALTER,DROP
    • DML (Data Manipulation Language):数据操作语言,用于操作表中的数据。如SELECT,INSERT,UPDATE,DELETE
    • DCL (Data Control Language):数据控制语言,用于控制访问权限。如GRANT,REVOKE

3. 数据类型详解

为列选择合适的数据类型至关重要,它影响数据的存储效率、完整性和查询性能。MySQL 支持多种数据类型,主要分为以下几类:

3.1 数值类型

用于存储数字。

类型说明示例/范围
INT/INTEGER标准整数,最常用。-21474836482147483647
BIGINT大整数。更大范围的整数
DECIMAL(M, D)精确小数,M 是总位数,D 是小数位数。适用于金融等需要精确计算的场景。DECIMAL(10, 2)可存储12345678.12
FLOAT单精度浮点数,近似值。
DOUBLE双精度浮点数,近似值。

3.2 字符串类型

用于存储文本。

类型说明特点
CHAR(N)定长字符串。长度固定为 N 个字符,不足部分用空格填充,检索速度快。
VARCHAR(N)变长字符串。长度可变,最大长度为 N 个字符,节省存储空间。最常用。
TEXT长文本数据。可存储大量文本(如文章内容),最大支持约 65KB (TEXT),还有MEDIUMTEXT,LONGTEXT

3.3 日期与时间类型

用于存储时间点或时间段。

类型格式说明
DATEYYYY-MM-DD仅存储日期。
TIMEHH:MM:SS仅存储时间。
DATETIMEYYYY-MM-DD HH:MM:SS存储日期和时间。与时区无关。
TIMESTAMPYYYY-MM-DD HH:MM:SS存储日期和时间。与时区有关,范围较小(1970-01-012038-01-19),但具有自动初始化/更新特性。

3.4 其他类型

  • ENUM:枚举类型,值必须从预定义列表中选取。例如ENUM('男', '女')
  • SET:集合类型,值可以从预定义列表中选取零个或多个。
  • BOOLEAN/BOOL:本质上是TINYINT(1)的别名,0 表示 FALSE,非 0 表示 TRUE。

选择建议

  • 整数INT大整数BIGINT
  • 金额、精确小数DECIMAL
  • 可变长度字符串几乎总是用VARCHAR
  • 日期时间通常用DATETIME,如果需要自动记录行创建/更新时间,可考虑TIMESTAMP

4. 数据库操作 (DDL)

4.1 创建数据库

CREATEDATABASE`my_database`CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;
  • CHARACTER SET utf8mb4:设置字符集为utf8mb4,支持存储所有 Unicode 字符(包括 Emoji)。
  • COLLATE utf8mb4_unicode_ci:设置排序规则为utf8mb4_unicode_ci,进行不区分大小写的比较。

4.2 查看数据库

-- 查看所有数据库SHOWDATABASES;-- 查看特定数据库的创建信息SHOWCREATEDATABASE`my_database`;

4.3 选择/使用数据库

在对表进行操作前,必须先指定要操作的数据库。

USE`my_database`;

4.4 删除数据库

(危险操作!会删除数据库内所有数据,不可恢复)

DROPDATABASE`my_database`;

5. 数据表操作 (DDL)

5.1 创建表

创建表需要定义表名、列名、列的数据类型以及约束(如主键、非空等)。

CREATETABLE`users`(`id`INTUNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT'用户ID,主键',`username`VARCHAR(50)NOTNULLUNIQUECOMMENT'用户名,唯一',`email`VARCHAR(100)NOTNULLUNIQUECOMMENT'邮箱,唯一',`password_hash`CHAR(64)NOTNULLCOMMENT'密码哈希值',`age`TINYINTUNSIGNEDCOMMENT'年龄',`gender`ENUM('男','女','其他')DEFAULT'其他'COMMENT'性别',`created_at`DATETIMENOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间',`updated_at`DATETIMENOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'更新时间',PRIMARYKEY(`id`),-- 定义主键INDEX`idx_username`(`username`)-- 为 username 创建索引,加速查询)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ciCOMMENT='用户表';

关键点解析

  • NOT NULL:该列不允许存储NULL值。
  • AUTO_INCREMENT:自动递增,常用于主键。
  • UNIQUE:该列的值必须唯一。
  • DEFAULT:指定列的默认值。
  • COMMENT:为列或表添加注释,提高可读性。
  • PRIMARY KEY (id):将id列设为主键。
  • INDEX idx_username (username):在username列上创建名为idx_username的索引。
  • ENGINE=InnoDB:指定存储引擎为 InnoDB(支持事务、行级锁,推荐)。
  • DEFAULT CHARSET=utf8mb4:设置表的默认字符集。

5.2 查看表

-- 查看当前数据库中的所有表SHOWTABLES;-- 查看表的结构(列定义)DESCRIBE`users`;-- 或SHOWCOLUMNSFROM`users`;-- 查看表的创建语句(包含所有细节)SHOWCREATETABLE`users`;

5.3 修改表结构

使用ALTER TABLE语句。

添加列

ALTERTABLE`users`ADDCOLUMN`avatar_url`VARCHAR(255)COMMENT'头像链接'AFTER`email`;

修改列定义

ALTERTABLE`users`MODIFYCOLUMN`username`VARCHAR(100)NOTNULLCOMMENT'修改后的用户名';

重命名列

ALTERTABLE`users`CHANGECOLUMN`age``user_age`TINYINTUNSIGNEDCOMMENT'用户年龄';

删除列

ALTERTABLE`users`DROPCOLUMN`gender`;

添加索引

ALTERTABLE`users`ADDINDEX`idx_email`(`email`);

5.4 重命名表

RENAMETABLE`old_users`TO`new_users`;

5.5 删除表

(危险操作!会删除表及其所有数据,不可恢复)

DROPTABLE`users`;

6. 约束与索引

6.1 常用约束

约束用于确保表中数据的准确性和可靠性。

  • 主键约束 (PRIMARY KEY):唯一且非空。
  • 唯一约束 (UNIQUE):确保某列或列组合的值唯一。
  • 非空约束 (NOT NULL):确保列不能有NULL值。
  • 默认约束 (DEFAULT):当插入数据未指定该列值时,使用默认值。
  • 外键约束 (FOREIGN KEY):确保一个表中的数据匹配另一个表中值的有效性(引用完整性)。本文为入门指南,外键将在进阶篇详细讨论。

6.2 索引

索引就像书的目录,能极大加快数据检索速度,但会增加写操作(增、删、改)的开销和存储空间。

  • 主键索引 (PRIMARY):自动创建,唯一且非空。
  • 唯一索引 (UNIQUE):确保索引列的值唯一。
  • 普通索引 (INDEX/KEY):最基本的索引,仅用于加速查询。
  • 创建时机:通常在WHEREORDER BYJOIN条件中频繁使用的列上创建索引。

7. 总结与实践建议

通过本文,你已经系统梳理了 MySQL 的基础概念、数据类型和库表操作(DDL)。这是你数据库之旅的第一步。

下一步学习建议

  1. 动手实践:在本地或在线 MySQL 环境中,按照本文的 SQL 示例逐一执行,观察结果。
  2. 设计表结构:尝试为一个简单的博客系统(包含用户、文章、评论)设计表结构,并写出CREATE TABLE语句。
  3. 深入学习 DML:掌握INSERT(插入)、SELECT(查询)、UPDATE(更新)、DELETE(删除)语句,这是与数据交互的核心。
  4. 探索进阶主题:了解事务(Transaction)、视图(View)、存储过程(Stored Procedure)等高级特性。

记住,理解概念后,持续的编码实践是掌握 SQL 的唯一途径。