Skip to content

2026-08-29 · MySQL 学习笔记 03

MySQL 增删改查

用便利店场景,一张商品表:

sql
CREATE TABLE goods (
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  name VARCHAR(50) NOT NULL COMMENT '商品名',
  price DECIMAL(10,2) NOT NULL COMMENT '单价',
  stock INT NOT NULL DEFAULT 0 COMMENT '库存',
  category VARCHAR(20) COMMENT '分类',
  create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
) COMMENT '商品表';

1. 插入 INSERT

sql
-- 单条
INSERT INTO goods (name, price, stock, category) VALUES ('可乐', 3.50, 100, '饮料');

-- 多条(括号逗号连着写)
INSERT INTO goods (name, price, stock, category) VALUES
('矿泉水', 2.00, 200, '饮料'),
('薯片', 6.50, 50, '零食'),
('面包', 5.00, 80, '食品');
  • idcreate_time 不用写,自增 + 自动填时间;
  • 列的顺序和值的顺序要一一对应。

2. 查询 SELECT

sql
-- 全查
SELECT * FROM goods;

-- 只查需要的列(工作里推荐)
SELECT name, price FROM goods;

-- 别名:给列起个临时名,结果表头显示
SELECT name AS 商品名, price AS 单价 FROM goods;

SELECT * 学习时随便用,项目代码里尽量写列名——表加列时 * 会把不想要的数据也查出来。

3. 条件过滤 WHERE

sql
-- 精确
SELECT * FROM goods WHERE name = '可乐';
SELECT * FROM goods WHERE category = '饮料';

-- 不等、比较
SELECT * FROM goods WHERE price > 5;
SELECT * FROM goods WHERE price <= 5;

-- 多个条件:AND(同时满足)OR(满足其一)
SELECT * FROM goods WHERE category = '饮料' AND price < 3;
SELECT * FROM goods WHERE category = '饮料' OR category = '零食';

-- 区间:BETWEEN ... AND
SELECT * FROM goods WHERE price BETWEEN 2 AND 6;

-- 在集合里:IN
SELECT * FROM goods WHERE category IN ('饮料', '零食');

-- 模糊:LIKE,% 代表任意长度字符
SELECT * FROM goods WHERE name LIKE '%水%';   -- 名字里带"水"
SELECT * FROM goods WHERE name LIKE '可乐%';  -- 以"可乐"开头

-- 空值判断:IS NULL / IS NOT NULL(不能用 = null!)
SELECT * FROM goods WHERE category IS NULL;

4. 修改 UPDATE

sql
UPDATE goods SET price = 3.00 WHERE name = '可乐';
UPDATE goods SET price = 3.00, stock = 90 WHERE name = '可乐';   -- 改多列

UPDATE 必须带 WHERE。 不带 WHERE 就是全表更新:

sql
UPDATE goods SET price = 3.00;   -- 所有商品变 3 块

5. 删除 DELETE

sql
DELETE FROM goods WHERE name = '酸奶';

DELETE 必须带 WHERE。

sql
DELETE FROM goods;   -- 表清空

删光又要保留表结构(清空计数器也归零)用 TRUNCATE TABLE goods;,但同样慎用。

6. 改完怎么确认

改完顺手查一眼:

sql
SELECT * FROM goods WHERE name = '可乐';

7. 三个高频坑

后果解法
UPDATE / DELETE 忘写 WHERE全表数据被改/被删写完 SELECT 复制改的习惯,先 SELECT * FROM ... WHERE ... 看命中哪些行
中文乱码存进去是乱码建库用 utf8mb4;命令行连库加 --default-character-set=utf8mb4
值类型写错存的脏数据字符串必须加引号,数字不加,日期用 '2026-08-29' 格式