MySQL 基础模型:从数据库、表到基础 DDL 操作
2026/7/22 3:21:55 网站建设 项目流程

学习 MySQL 时,最先需要建立的不是某一条 SQL 的记忆,而是对 MySQL 基础模型的理解:客户端如何连接 MySQL Server,数据库和表之间是什么关系,SQL 语句分别在操作哪一层对象。

本文从数据库的基本概念出发,介绍 MySQL 中服务器、数据库、表之间的关系,并通过常见 DDL 语句完成数据库和表的基础操作。

1. 数据库基础

1.1 什么是数据库

在程序开发中,数据可以直接保存到普通文件中,但这种方式通常存在以下问题:

  • 安全性较弱,数据访问、权限控制和备份恢复都需要应用程序自行处理。
  • 查询和管理不方便,复杂条件检索、排序、聚合等操作实现成本较高。
  • 不适合管理海量数据,文件读写、并发访问和数据一致性都容易成为问题。
  • 程序需要直接控制数据组织方式,业务代码和数据存储细节容易耦合。

数据库可以理解为按照一定结构组织、存储和管理数据的集合。MySQL 则是一个关系型数据库管理系统,负责提供数据存储、查询、更新、权限控制、事务处理等能力。

在 MySQL 中,数据通常以二维表的形式组织:

  • 表中的一行表示一条记录。
  • 表中的一列表示一个字段。
  • 字段有明确的数据类型,例如整数、字符串、日期时间等。

1.2 MySQL Server、数据库和表的关系

安装 MySQL,本质上是在机器上安装一个数据库管理系统。应用程序并不直接操作磁盘文件,而是通过客户端连接 MySQL Server,再由 MySQL Server 管理具体的数据库和表。

而server、DB、table三者之间的关系可以表示为:

可以这样理解:

  • 一个 MySQL Server 可以管理多个数据库。
  • 一个数据库可以包含多张表。
  • 一张表用于保存某一类实体或业务对象的数据。
  • 表由字段和记录组成,字段描述数据结构,记录保存具体数据。

1.3 MySQL 的简单使用流程

第一次使用 MySQL 时,通常会经历以下步骤:

  1. 创建数据库。
  2. 选择当前要使用的数据库。
  3. 在数据库中创建表。
  4. 向表中写入或查询数据。

示例:

createdatabasedb_name;usedb_name;createtabletable_name(idint,namevarchar(20));

其中,create database用于创建数据库,use用于切换当前数据库,create table用于创建表结构。

1.4 MySQL 架构的基本认知

从使用者视角看,MySQL 可以分为几个主要层次:

其中,SQL 层负责理解和执行 SQL 语句,存储引擎层负责真正的数据读写。MySQL 支持多种存储引擎,日常开发中最常见的是innodb

现阶段,先建立一个基本认识即可:我们写的 SQL 会提交给 MySQL Server,由 MySQL Server 解析、优化,并通过存储引擎访问底层数据。

1.5 SQL 分类

SQL 是操作关系型数据库的标准语言。按照用途,常见 SQL 可以分为以下几类:

分类全称作用常见语句
DDLData Definition Language定义和维护数据库对象结构createalterdrop
DMLData Manipulation Language操作表中的数据insertupdatedelete
DQLData Query Language查询表中的数据select
DCLData Control Language控制权限grantrevoke
TCLTransaction Control Language控制事务commitrollback

本文重点介绍 DDL,也就是数据库和表结构的创建、修改与删除。

2. 数据库的操作

2.1 创建数据库

创建数据库的基本语法如下:

createdatabase[ifnotexists]db_name[create_option]...;create_option:[default]charactersetcharset_name|[default]collatecollation_name

常用写法:

createdatabaseifnotexistsschooldefaultcharactersetutf8mb4defaultcollateutf8mb4_0900_ai_ci;

说明:

  • if not exists表示当数据库不存在时才创建,可以避免重复创建时报错。
  • character set用于指定数据库默认字符集。
  • collate用于指定数据库默认排序规则。

2.2 字符集和排序规则

字符集和排序规则是创建数据库时经常被忽略,但实际开发中很重要的配置。

character set决定字符如何编码和存储。例如,utf8mb4可以完整支持 Unicode 字符,包括中文、Emoji 和一些特殊符号。

collate决定字符串如何比较和排序。例如,在进行order by、唯一索引比较、字符串等值判断时,排序规则会影响比较结果。

日常开发建议:

  • 优先使用utf8mb4,不要使用 MySQL 中旧语义的utf8
  • 同一个业务系统尽量保持数据库、表、字段的字符集和排序规则一致。
  • 如果没有特殊需求,可以使用 MySQL 8.0 默认的utf8mb4_0900_ai_ci
  • 如果需要兼容旧版本 MySQL,常见选择是utf8mb4_general_ciutf8mb4_unicode_ci

其中,ci表示 case-insensitive,即大小写不敏感。不同排序规则在大小写、重音字符、语言比较规则等方面可能存在差异。

2.3 查看数据库

查看当前 MySQL Server 中的数据库:

showdatabases;

查看某个数据库的创建语句:

showcreatedatabaseschool;

show create database可以看到数据库当前使用的字符集和排序规则,排查环境差异时非常有用。

2.4 修改数据库

修改数据库的基本语法如下:

alterdatabasedb_name[alter_option]...;alter_option:[default]charactersetcharset_name|[default]collatecollation_name

示例:

alterdatabaseschooldefaultcharactersetutf8mb4defaultcollateutf8mb4_0900_ai_ci;

需要注意的是,修改数据库默认字符集和排序规则,主要影响后续新建的表和字段。已经存在的表或字段不会自动全部转换,需要单独处理。

2.5 删除数据库

删除数据库的语法如下:

dropdatabase[ifexists]db_name;

示例:

dropdatabaseifexistsschool;

drop database会删除整个数据库,包括数据库中的所有表和数据。这个操作不可轻易执行,尤其是在生产环境中,执行前必须确认数据库名称、备份状态和影响范围。

3. 表的操作

3.1 创建表

创建表的基本语法如下:

createtabletable_name(column_name data_type[column_option],column_name data_type[column_option],...)[table_option];

常见表选项包括字符集、排序规则和存储引擎:

createtablestudent(idint,namevarchar(20),gendervarchar(10),ageint)charactersetutf8mb4collateutf8mb4_0900_ai_ciengine=innodb;

说明:

  • student是表名。
  • idnamegenderage是字段名。
  • intvarchar(20)是字段的数据类型。
  • character setcollate用于指定表的默认字符集和排序规则。
  • engine = innodb指定表使用innodb存储引擎。

实际开发中,表结构通常还会包含主键、非空约束、默认值和字段注释。例如:

createtablestudent(idbigintprimarykeyauto_incrementcomment'学生ID',namevarchar(64)notnullcomment'学生姓名',gendervarchar(10)defaultnullcomment'性别',ageintdefaultnullcomment'年龄',created_atdatetimenotnulldefaultcurrent_timestampcomment'创建时间')engine=innodbdefaultcharactersetutf8mb4defaultcollateutf8mb4_0900_ai_cicomment='学生表';

这个示例更接近日常业务表的写法:

  • primary key表示主键。
  • auto_increment表示自增。
  • not null表示字段不能为空。
  • default表示默认值。
  • comment用于添加注释,方便后续维护。

3.2 查看表

查看当前数据库中的所有表:

showtables;

查看表结构:

descstudent;

查看表的完整创建语句:

showcreatetablestudent;

3.3 修改表

表创建后,如果业务需求发生变化,可以使用alter table修改表结构。

添加字段

语法示例:

altertabletable_nameaddcolumn_name data_type[column_option];

例如,在student表中添加一个字段,用于保存图片路径:

altertablestudentaddassetsvarchar(100)comment'图片路径'aftergender;

after gender表示将新字段添加到gender字段后面。如果不指定位置,MySQL 通常会把字段添加到表的最后。

修改字段类型

语法示例:

altertabletable_namemodifycolumn_name data_type[column_option];

例如,将name字段长度修改为 64:

altertablestudentmodifynamevarchar(64)notnullcomment'学生姓名';

使用modify时要注意,字段原有的约束和注释可能需要在语句中重新声明,否则可能出现定义变化。

修改字段名

如果需要修改字段名称,可以使用change

altertablestudent change assets avatar_pathvarchar(100)comment'头像路径';

change同时包含旧字段名、新字段名和字段定义。

删除字段

删除字段的语法如下:

altertabletable_namedropcolumn_name;

例如:

altertablestudentdropgender;

删除字段会同时删除该字段下保存的所有数据。执行前应确认字段是否还被业务代码、查询语句、索引或报表使用。

重命名表

可以使用rename to修改表名:

altertablestudentrenametostu;

表重命名后,所有依赖旧表名的 SQL、程序代码和运维脚本都需要同步调整。

3.4 删除表

删除表的语法如下:

droptable[ifexists]table_name;

也可以一次删除多张表:

droptableifexistsstudent,course;

drop table会删除表结构以及表中的全部数据。与删除数据库类似,这也是高风险操作。生产环境执行前,应先确认备份、依赖关系和执行环境。

4. 小结

MySQL 的基础模型可以概括为:

  • 客户端通过 SQL 连接并操作 MySQL Server。
  • 一个 MySQL Server 可以管理多个数据库。
  • 一个数据库可以包含多张表。
  • 表由字段和记录组成,字段定义结构,记录保存数据。
  • DDL 语句用于管理数据库对象结构,常见操作包括createalterdrop

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询