MySQL 入门:建库建表与常用查询一次讲清

举报
yd_220055865 发表于 2026/11/01 12:56:59 2026/11/01
【摘要】 几乎所有带账号、订单、文章的网站背后都有一个数据库在存数据。MySQL 是其中最常见的一种关系型数据库:免费、资料多、很多云服务器和虚拟主机都默认提供,学会它,日常开发里“数据往哪存、怎么查”这两个问题就基本有答案了。这篇文章从最基础的概念讲起,走完建库、建表、增删改查这条主线,帮你把 MySQL 从“听说过”变成“会用”。 一、关系型数据库到底在存什么可以把 MySQL 想象成一个带格子的...

几乎所有带账号、订单、文章的网站背后都有一个数据库在存数据。MySQL 是其中最常见的一种关系型数据库:免费、资料多、很多云服务器和虚拟主机都默认提供,学会它,日常开发里“数据往哪存、怎么查”这两个问题就基本有答案了。这篇文章从最基础的概念讲起,走完建库、建表、增删改查这条主线,帮你把 MySQL 从“听说过”变成“会用”。

一、关系型数据库到底在存什么

可以把 MySQL 想象成一个带格子的电子表格集合。一个数据库(Database)里面有多张表(Table),每张表由行和列组成:一行是一条记录,比如一个用户;一列是一个字段,比如用户名、注册时间。每一列都有类型:整数、字符串、日期时间等等,类型定下来,存进去的数据就有了规矩,不会出现“年龄”一栏里混进一段文字的情况。

表和表之间通过关联字段联系起来。比如用户表里每个用户有一个编号 id,订单表里也存一个用户编号 user_id,就能知道这张订单属于谁。这种用编号互相引用的方式,就是关系型数据库里“关系”两个字的来源。理解了这一点,后面学查询时就不会觉得 JOIN 是凭空冒出来的概念。

另外要分清两个容易混的概念:MySQL 是数据库管理系统,也就是负责存取数据的软件;MySQL 服务器上可以建多个数据库,每个数据库里再建多张表。刚开始学习时,一个项目对应一个数据库,基本够用了。

二、连上数据库,先看一眼全貌

安装方式因系统而异,云服务器上一般通过包管理器安装,本地学习也可以用图形化集成环境。装好并启动服务后,用命令行客户端连上去,就能开始操作。连接时需要主机地址、端口、用户名和密码,本地学习默认就是本机 3306 端口。

连上去先看三个命令,帮你建立全局视角:

SHOW DATABASES;
USE 你的数据库名;
SHOW TABLES;

第一条列出服务器上所有的数据库,第二条切换到你要操作的数据库,第三条列出这个库里的所有表。刚开始很多人的困惑都来自“没切换数据库就建表”,表建到了默认库里,找半天找不到——先 USE 再操作,能省下不少麻烦。

三、建库建表:先把规矩定下来

建库的语句很简单,一般还会指定字符集。字符集建议直接用 utf8mb4,它能存中文、符号和表情符号;如果用了老式的 latin1 或 utf8(注意 MySQL 里的 utf8 是阉割版),存表情符号时就会报错或乱码,这是一个经典的新手坑。

CREATE DATABASE blog CHARACTER SET utf8mb4;

建表时要想清楚每一列的类型和约束。以一篇博客文章表为例:

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    content TEXT,
    author_id INT NOT NULL,
    status VARCHAR(20) DEFAULT 'draft',
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

逐项解释:

  • id INT AUTO_INCREMENT PRIMARY KEY:自增主键,每插入一行自动编号,不会重复,用它来唯一标识一篇文章。
  • VARCHAR(200):最长 200 个字符的短字符串,适合标题这类长度有限的字段;括号里的数字是上限,不是固定占用。
  • TEXT:长文本,适合文章正文这种长度不确定的内容,不需要写长度。
  • NOT NULL:这一列不能为空,写进数据时必须给值。
  • DEFAULT:不给值时自动填的默认值,比如文章默认状态是草稿。
  • DATETIME DEFAULT CURRENT_TIMESTAMP:创建时间默认填入当前时间,省得每次插入都手动传时间。

建好表可以用 DESC articles; 查看表结构,确认列名、类型和约束是不是自己想要的。设计表时有一个原则值得记下来:一个字段只存一件事。不要把“姓名和电话”塞进同一个字段,也不要把多个标签用逗号拼成一个字符串——字段拆得越干净,后面查询和修改越方便。

四、增删改:数据的四种基本操作

数据的操作归纳起来就是增删改查,英文缩写 CRUD。先看增加,也就是插入数据:

INSERT INTO articles (title, content, author_id)
VALUES ('我的第一篇文章', '正文内容……', 1);

注意列名和值要一一对应,id 是自增的不用写,status 和 created_at 有默认值也可以不写。一次插入多行时,VALUES 后面用逗号隔开多组括号,效率比一条一条插高得多。

修改用 UPDATE,删除用 DELETE,这两条语句有一个共同的铁律:必须带 WHERE 条件。

UPDATE articles SET status = 'published' WHERE id = 1;
DELETE FROM articles WHERE id = 1;

没有 WHERE 的 UPDATE 会把整张表所有行的状态都改掉,没有 WHERE 的 DELETE 会清空整张表。生产环境里这种事故每年都会发生,新手期就养成习惯:写 UPDATE 和 DELETE 时先写 WHERE,再补前面的部分;执行前还可以先用同样的 WHERE 跑一条 SELECT,确认命中的正是自己想改的那几行。

五、查询:SELECT 是最值得花时间的部分

查询是数据库操作里比重最大的一块,掌握下面这几招,日常需求基本都能覆盖。

最基本的查询是按条件筛选和排序:

SELECT id, title, created_at
FROM articles
WHERE status = 'published'
ORDER BY created_at DESC
LIMIT 10;

这条语句的意思是:从文章表里找出已发布的文章,按创建时间倒序排列,只取最新 10 条。SELECT 后面写要返回的列,* 表示全部列,但正式代码里建议写明列名,只拿需要的字段,省流量也省心。LIMIT 用来分页,配合 OFFSET 可以实现“第 2 页、每页 10 条”这类需求。

条件筛选里最常用的是比较和模糊匹配:

SELECT id, title FROM articles WHERE author_id = 1;
SELECT id, title FROM articles WHERE title LIKE '%MySQL%';

LIKE '%MySQL%' 表示标题里包含 MySQL 的记录,前后百分号代表任意字符。要注意 LIKE 匹配在数据量大时比较慢,标题搜索量上来之后,一般会交给专门的搜索方案,而不是一直用 LIKE。

聚合查询用来算统计数字,比如一共有多少篇文章、每个作者各发了多少篇:

SELECT COUNT(*) FROM articles;
SELECT author_id, COUNT(*) AS article_count
FROM articles
GROUP BY author_id;

COUNT(*) 是数行数,GROUP BY 是按某个字段分组统计,AS 是给结果列起个可读的名字。分组统计是报表和后台管理页面最常用的查询,值得多练几遍。

多表关联查询用 JOIN,典型场景是“查文章时顺带带出作者名”:

SELECT a.title, u.username
FROM articles AS a
JOIN users AS u ON a.author_id = u.id;

JOIN ... ON 的意思是:按 author_id 等于用户 id 的条件,把两张表拼起来。AS 给表起别名,语句写起来更短。刚开始学 JOIN 时,先想清楚“两张表靠哪两个字段对上”,语句自然就写出来了。

六、新手最常见的五个坑

第一,字符集没设 utf8mb4,存中文或表情时乱码或报错,建库时就定好。

第二,UPDATE 和 DELETE 忘写 WHERE,整张表遭殃。先写 WHERE,再补其他部分。

第三,密码、敏感信息直接存明文。密码应该存加盐哈希后的结果,永远不要把原始密码写进数据库。

第四,表里没有主键,或者主键用业务字段(比如手机号)充当。业务字段可能变、可能重复,自增 id 做主键最稳妥。

第五,数据量大了还用 SELECT *。只取需要的列,加好索引,查询速度才跟得上。索引的原理可以后面再学,但“只拿需要的列”这个习惯现在就可以养成。

七、学完这篇之后可以往哪走

掌握了建库、建表、增删改查,日常开发的数据操作就入门了。接下来可以按这个顺序深入:先练熟各种 WHERE 条件组合和 JOIN,再学索引的原理和怎么给慢查询提速,然后了解事务(多条语句要么全成功、要么全回滚)和备份恢复——数据丢了能找回来,比什么都重要。MySQL 本身不难,难的是养成“先设计表结构、再写代码”的习惯:字段类型、约束、关联关系在建表时想清楚,后面写业务代码时,数据库就不会反过来给你找麻烦。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。