零基础学 MySQL(上):从建库建表到增删改查,一篇搭好 SQL 基础

👇 点击进入作者专栏:
《Java 技术精讲:并发与核心组件》

文章目录

    • [一、先弄清 4 个基本概念](#一、先弄清 4 个基本概念)
      • [MySQL 和 SQL 有什么区别?](#MySQL 和 SQL 有什么区别?)
    • 二、创建第一个数据库
    • 三、设计并创建学生表
    • [四、掌握最核心的 CRUD](#四、掌握最核心的 CRUD)
      • [1. 新增数据:`INSERT`](#1. 新增数据:INSERT)
      • [2. 查询数据:`SELECT`](#2. 查询数据:SELECT)
      • [3. 修改数据:`UPDATE`](#3. 修改数据:UPDATE)
      • [4. 删除数据:`DELETE`](#4. 删除数据:DELETE)
    • [五、初学者最容易踩的 5 个坑](#五、初学者最容易踩的 5 个坑)
      • [1. 忘记选择数据库](#1. 忘记选择数据库)
      • [2. 字符串没有加单引号](#2. 字符串没有加单引号)
      • [3. `UPDATE` 或 `DELETE` 忘记写 `WHERE`](#3. UPDATEDELETE 忘记写 WHERE)
      • [4. 把 `NULL` 当成空字符串](#4. 把 NULL 当成空字符串)
      • [5. 用姓名代替唯一编号定位学生](#5. 用姓名代替唯一编号定位学生)
    • 六、基础语法速查
    • 七、动手练习
    • 八、写在最后

本文适合 MySQL 零基础、数据库课程学习、期末复习和后端入门。学完后,你可以独立创建数据库和数据表,并完成最常用的增、删、改、查操作。

第一次学 MySQL,最容易陷入一个误区:背了很多命令,却不知道这些命令为什么要这样写。

这篇文章不零散讲语法,而是围绕一个简化的"学生选课管理系统"完成第一轮实战:先设计一张学生表,再把数据写进去、查出来、改正确、删干净。

一、先弄清 4 个基本概念

假设学校需要保存学生信息,可以把数据组织成下面这张表:

id name gender age class_name
1 张三 19 软件1班
2 李四 20 软件1班

从这张表可以理解数据库中的四个核心概念:

  • 数据库(Database) :存放和管理数据的仓库,例如 school_db
  • 数据表(Table) :保存某一类数据的结构,例如学生表 student
  • 字段(Column) :表中的一列,例如姓名字段 name
  • 记录(Row):表中的一行,例如张三的完整信息。

一句话记忆:一个数据库包含多张表,一张表包含多个字段和多条记录。

MySQL 和 SQL 有什么区别?

MySQL 是数据库管理系统,SQL 是操作关系型数据库的语言。我们安装和使用的是 MySQL,写下的 CREATEINSERTSELECT 等命令属于 SQL。

初学阶段常见的 SQL 可以简单分为:

类型 作用 常见命令
DDL 定义数据库结构 CREATEALTERDROP
DML 增删改表中数据 INSERTUPDATEDELETE
DQL 查询数据 SELECT

不必急着背分类,先会使用,再回头总结会更自然。

二、创建第一个数据库

创建用于练习的数据库:

sql 复制代码
CREATE DATABASE IF NOT EXISTS school_db
DEFAULT CHARACTER SET utf8mb4;

其中:

  • IF NOT EXISTS:数据库不存在时才创建,避免重复执行时报错;
  • utf8mb4:能够完整保存中文和常见特殊字符。

创建后必须选择数据库,否则 MySQL 不知道接下来的表要放在哪里:

sql 复制代码
USE school_db;

可以用下面的语句确认当前正在使用哪个数据库:

sql 复制代码
SELECT DATABASE();

三、设计并创建学生表

建表前先确定"要存什么"和"用什么类型存"。

字段 类型 含义 设计理由
id INT 学生编号 整数便于排序和关联
name VARCHAR(20) 姓名 文本长度不固定
gender VARCHAR(10) 性别 示例中直接保存文字
age TINYINT UNSIGNED 年龄 非负且数值范围较小
class_name VARCHAR(30) 班级 班级名称属于文本

创建表:

sql 复制代码
CREATE TABLE student (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    gender VARCHAR(10),
    age TINYINT UNSIGNED,
    class_name VARCHAR(30)
);

这里先记住三个最常用的规则:

  • PRIMARY KEY:主键,每条记录的 id 必须唯一;
  • AUTO_INCREMENT:插入数据时不写 id,MySQL 会自动递增编号;
  • NOT NULL:姓名不能为空。

查看表结构:

sql 复制代码
DESC student;

建表不是把所有字段都写成 VARCHAR。数字是否要计算、文本最长多长、字段能否为空,都会影响类型选择。

四、掌握最核心的 CRUD

CRUD 是四类基础操作的缩写:Create(新增)、Read(查询)、Update(修改)、Delete(删除)。几乎所有管理系统都离不开它们。

1. 新增数据:INSERT

一次插入三名学生:

sql 复制代码
INSERT INTO student (name, gender, age, class_name) VALUES
('张三', '男', 19, '软件1班'),
('李四', '女', 20, '软件1班'),
('王五', '男', 18, '软件2班');

推荐始终写出字段名。这样即使以后调整表结构,也能清楚知道每个值对应哪个字段。

2. 查询数据:SELECT

查看全部字段和全部记录:

sql 复制代码
SELECT * FROM student;

实际开发中更推荐只查询需要的字段:

sql 复制代码
SELECT name, class_name
FROM student;

按条件查询年龄不小于 19 岁的学生:

sql 复制代码
SELECT id, name, age
FROM student
WHERE age >= 19;

WHERE 决定"操作哪些记录",是查询、修改和删除时最重要的条件关键字。

3. 修改数据:UPDATE

把张三的年龄改为 20:

sql 复制代码
UPDATE student
SET age = 20
WHERE id = 1;

修改前最好先用相同条件查询:

sql 复制代码
SELECT * FROM student WHERE id = 1;

确认查询结果正是目标记录,再执行 UPDATE,可以显著减少误操作。

4. 删除数据:DELETE

删除王五的记录:

sql 复制代码
DELETE FROM student
WHERE id = 3;

DELETE 删除的是记录,不是数据表。删除表结构使用的是 DROP TABLE,两者不要混淆。

五、初学者最容易踩的 5 个坑

1. 忘记选择数据库

出现"No database selected"时,先执行:

sql 复制代码
USE school_db;

2. 字符串没有加单引号

错误:

sql 复制代码
INSERT INTO student (name) VALUES (张三);

正确:

sql 复制代码
INSERT INTO student (name) VALUES ('张三');

数字通常直接写,字符串和日期通常使用单引号。

3. UPDATEDELETE 忘记写 WHERE

sql 复制代码
UPDATE student SET age = 20;

这条语句会把所有学生的年龄都改为 20。执行修改或删除前,应检查三件事:是否写了 WHERE、条件是否准确、是否先用 SELECT 验证过。

4. 把 NULL 当成空字符串

NULL 表示未知或缺失,'' 表示一个长度为 0 的字符串,它们不是一回事。判断空值应使用:

sql 复制代码
SELECT * FROM student
WHERE gender IS NULL;

5. 用姓名代替唯一编号定位学生

真实系统可能存在同名学生,修改和删除时更稳妥的做法是使用主键 id,不要只凭姓名定位记录。

六、基础语法速查

需求 SQL 模板
创建数据库 CREATE DATABASE 数据库名;
选择数据库 USE 数据库名;
创建表 CREATE TABLE 表名 (...);
插入数据 INSERT INTO 表名 (字段) VALUES (值);
查询数据 SELECT 字段 FROM 表名 WHERE 条件;
修改数据 UPDATE 表名 SET 字段=值 WHERE 条件;
删除数据 DELETE FROM 表名 WHERE 条件;

七、动手练习

不要只看代码,建议亲自完成下面 4 个任务:

  1. 新增学生"赵六",女,19 岁,软件2班;
  2. 查询软件1班学生的姓名和年龄;
  3. id = 2 的学生年龄改为 21;
  4. 删除 id = 3 的学生,并查询剩余数据。

参考答案:

sql 复制代码
INSERT INTO student (name, gender, age, class_name)
VALUES ('赵六', '女', 19, '软件2班');

SELECT name, age
FROM student
WHERE class_name = '软件1班';

UPDATE student
SET age = 21
WHERE id = 2;

DELETE FROM student
WHERE id = 3;

SELECT * FROM student;

八、写在最后

学完这一篇,你已经完成了 MySQL 的第一条完整操作链:设计字段 → 创建数据库 → 创建数据表 → 插入数据 → 查询验证 → 修改和删除。

但真实系统不会只有一张表,也不会永远只查全部数据。下一篇将继续使用学生选课系统,讲清条件查询、排序、聚合、分组和多表连接,让你从"会查数据"进阶到"能从数据中得到结果"。

前路漫漫,同频的人终会奔赴同一个方向✨

如果这篇内容对你有所启发,麻烦点个赞👍、关注博主,干货建议先收藏避免之后找不到。后续还会持续输出更多实用教程📚

创作不易,还请多多支持!💖

专栏下一篇:《零基础学 MySQL(中):条件查询、分组统计与多表连接》

相关推荐
catchadmin1 小时前
NativePHP v4 让 Blade 构建原生 iOS 与 Android 界面
android·ios·ai·php
FfHUCisI2 小时前
Golang 数据库连接池深度调优
android·数据库·golang
我不会插花弄玉3 小时前
2.库的操作【由浅入深-MySQL】
数据库·mysql
古法安卓5 小时前
Android-epoll原理详解
android·java·android studio
King of fraud5 小时前
Linux 下 MySQL 基础操作:创建用户、数据库与权限管理实战
linux·数据库·mysql
这个DBA有点耶5 小时前
Redis大key“根治”指南:拆分策略与数据结构选型
数据库·mysql·架构
字节暗面7 小时前
四款 APP 加固强度测评:让 AI 拆了四个包,结果有点出乎意料
android·逆向工程·加固
网安蟹佬霸7 小时前
蓝队防御实战:SIEM与SOAR构建安全运营中心(万字详解+实战配置)
android·安全·web安全·网络安全·网安
__zRainy__8 小时前
Node系列 · ORM:mysql 驱动程序
数据库·后端·mysql·node.js·orm