前言
今天正式开始学习 MySQL,主要接触了数据库与数据表的创建、SQL 基本语法、数据的增删改查、条件筛选、排序、聚合函数以及 SQL 文件的保存与执行。
对于之前主要学习 JavaScript、React、Node.js 的我来说,MySQL 是后端开发中重要的一环。前端负责展示数据,Node.js 可以负责处理业务逻辑,而 MySQL 则可以用来持久化存储和管理数据。
本文记录第一天学习的核心知识点。
一、MySQL 和 SQL 是什么?
MySQL 是一种关系型数据库管理系统,而 SQL(Structured Query Language)是操作关系型数据库的语言。
可以简单理解为:
-
MySQL:负责存储、管理数据。
-
SQL:负责创建、查询、修改和删除数据。
例如,我们开发一个商城系统,需要保存商品名称、价格、库存等信息,就可以使用 MySQL。
MySQL 通过表(Table)组织数据,每张表由行和列组成。
| id | name | price | stock |
|---|---|---|---|
| 1 | 手机 | 2999 | 100 |
| 2 | 键盘 | 199 | 50 |
| 3 | 鼠标 | 99 | 80 |
其中,一行代表一条商品记录,一列代表一个数据字段。
二、创建数据库和数据表
1. 创建数据库
使用 CREATE DATABASE 创建数据库:
CREATE DATABASE shop_db;
其中:
-
CREATE DATABASE:创建数据库的 SQL 命令。 -
shop_db:数据库名称。
创建后,通过 USE 选择当前要操作的数据库:
USE shop_db;
2. 创建数据表
使用 CREATE TABLE 创建商品表:
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
price DECIMAL(10, 2),
stock INT
);
这段代码中涉及几个常见的数据类型和约束。
| 语法 | 作用 |
|---|---|
INT |
整数类型 |
VARCHAR(50) |
最多存储 50 个字符的字符串 |
DECIMAL(10,2) |
定点小数,总精度为 10 位,其中小数占 2 位 |
PRIMARY KEY |
主键,用于唯一标识一条记录 |
AUTO_INCREMENT |
自动递增 |
NOT NULL |
字段不能为 NULL |
例如,id 设置了主键和自增后,插入商品时就不需要手动填写 ID。
三、SQL 基础增删改查(CRUD)
CRUD 是数据库最基本的四种操作:
-
Create:新增数据。
-
Read:查询数据。
-
Update:更新数据。
-
Delete:删除数据。
1. INSERT:插入数据
INSERT INTO products (name, price, stock)
VALUES ('手机', 2999, 100);
这里:
-
INSERT INTO:向指定表插入数据。 -
(name, price, stock):需要填写的字段。 -
VALUES:对应字段的值。
一次插入多条数据:
INSERT INTO products (name, price, stock)
VALUES
('键盘', 199, 50),
('鼠标', 99, 80);
2. SELECT:查询数据
查询表中的所有字段:
SELECT * FROM products;
其中:
-
SELECT:查询数据。 -
*:表示所有字段。 -
FROM:指定要查询的数据表。
如果只需要查询名称和价格:
SELECT name, price FROM products;
实际开发中,通常建议按需要选择字段,避免无意义地查询所有列。
3. UPDATE:修改数据
例如,将 ID 为 1 的商品价格修改为 2599:
UPDATE products
SET price = 2599
WHERE id = 1;
其中:
-
UPDATE:指定要修改的数据表。 -
SET:设置新的字段值。 -
WHERE:指定修改条件。
注意:如果不加 WHERE,可能会修改整张表中的所有记录。
4. DELETE:删除数据
删除 ID 为 3 的商品:
DELETE FROM products
WHERE id = 3;
这里 WHERE id = 3 指定了要删除哪条记录。
如果省略 WHERE:
DELETE FROM products;
则会删除表中所有记录,因此操作时需要格外小心。
四、WHERE 条件筛选
实际开发中,我们通常不需要获取整张表的数据,而是根据条件筛选。
例如,查询价格大于 100 的商品:
SELECT * FROM products
WHERE price > 100;
常见比较运算符:
| 运算符 | 含义 |
|---|---|
= |
等于 |
!= 或 <> |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
AND 和 OR
当存在多个筛选条件时,可以使用 AND 和 OR。
AND:多个条件必须同时满足。
SELECT * FROM products
WHERE price > 100 AND stock > 50;
表示查询价格大于 100,并且库存大于 50 的商品。
OR:满足任意一个条件即可。
SELECT * FROM products
WHERE price > 100 OR stock > 50;
表示价格大于 100,或者库存大于 50 的商品。
需要注意,SQL 中 AND 的优先级高于 OR。复杂条件建议使用括号明确逻辑关系。
五、ORDER BY 数据排序
查询数据时,经常需要按照价格、销量或时间排序。
使用 ORDER BY:
SELECT * FROM products
ORDER BY price ASC;
其中:
-
ORDER BY:指定排序字段。 -
ASC:升序,从小到大。 -
DESC:降序,从大到小。
例如,将商品按照价格从高到低排序:
SELECT * FROM products
ORDER BY price DESC;
还可以按多个字段排序:
SELECT * FROM products
ORDER BY price DESC, id ASC;
表示先按照价格降序排列,价格相同时,再按照 ID 升序排列。
六、COUNT() 函数与 AS 关键字
1. COUNT():统计数量
COUNT() 是 SQL 中常见的聚合函数,用于统计记录数量。
例如,统计商品表一共有多少条记录:
SELECT COUNT(*) FROM products;
还可以配合 WHERE 使用:
SELECT COUNT(*) FROM products
WHERE price > 100;
表示统计价格大于 100 的商品数量。
注意:COUNT(*) 统计符合条件的行数,而 COUNT(字段名) 只统计该字段不为 NULL 的记录数。
2. AS:设置别名
有时 SQL 查询结果中的字段名称不够直观,可以使用 AS 设置别名:
SELECT COUNT(*) AS total
FROM products;
查询结果中的列名就会显示为 total。
普通字段也可以使用别名:
SELECT name AS 商品名称,
price AS 商品价格
FROM products;
AS 只是为查询结果指定别名,并不会修改数据表原来的字段名称。
七、SQL 文件的保存与打开
在 MySQL Workbench 等数据库工具中,我们可以把编写的 SQL 语句保存为 .sql 文件。
例如:
mysql-study/
├── create_table.sql
├── insert_data.sql
└── query.sql
.sql 文件本质上是保存 SQL 语句的文本文件,例如:
USE shop_db;
SELECT * FROM products;
SELECT COUNT(*) AS total
FROM products;
以后打开这个文件,就可以查看、修改和重新执行这些语句。
需要注意:
保存 .sql****文件不等于保存数据库本身,也不代表其中的 SQL 已经执行。
SQL 文件保存的是操作指令,数据库中的实际数据则由 MySQL 管理。只有执行 SQL 语句,才会对数据库产生相应影响。
八、第一天学习总结
经过第一天的学习,我对 MySQL 的基本操作有了初步认识,也理解了数据库与前后端之间的关系。
例如,在一个 React + Express + MySQL 项目中:
React 前端
↓ 发送 HTTP 请求
Express 后端
↓ 执行 SQL
MySQL 数据库
↓ 返回查询结果
Express 后端
↓ 返回 JSON
React 页面展示数据
其中,React 负责页面交互,Express 负责处理接口和业务逻辑,MySQL 负责数据存储。
今天最需要掌握的 SQL 语句有:
| SQL 语句 | 主要作用 |
|---|---|
CREATE DATABASE |
创建数据库 |
CREATE TABLE |
创建数据表 |
INSERT INTO |
新增数据 |
SELECT |
查询数据 |
UPDATE |
更新数据 |
DELETE |
删除数据 |
WHERE |
条件筛选 |
AND / OR |
组合查询条件 |
ORDER BY |
查询结果排序 |
COUNT() |
统计数据数量 |
AS |
设置查询结果别名 |
总结:MySQL 第一天的核心就是理解数据库和表的关系,掌握 SQL 的增删改查、条件筛选、排序和聚合统计。
这些知识是后续学习多表查询、数据库设计、索引、事务,以及使用 Node.js 操作 MySQL 的基础。
下一步计划继续学习 SQL 进阶查询,并尝试通过 Express 编写接口,将前端页面与 MySQL 数据库真正连接起来。