MySQL增删改查SQL语句

时游大约 4 分钟

一、先回顾:我们要操作的表

假设你已经在上一章里创建了 demo 数据库和 users 表:

USE demo;

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    age INT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

接下来所有例子都围绕这张表来练习。


二、INSERT:插入数据

2.1 最常见写法

INSERT INTO users (name, email, age)
VALUES ('张三', 'zhangsan@test.com', 20);

说明:

  • INSERT INTO 表名 (列1, 列2, ...):指定要插入哪些列。
  • VALUES (值1, 值2, ...):按顺序对应上面的列。
  • id 字段设置了 AUTO_INCREMENT,可以不写,会自动生成。
  • created_at 有默认值,也可以不写。

2.2 一次插入多行

INSERT INTO users (name, email, age) VALUES
('李四', 'lisi@test.com', 22),
('王五', 'wangwu@test.com', 25),
('赵六', 'zhaoliu@test.com', 30);

小技巧:开发中初始化数据或者批量导入时会经常这样写。


三、SELECT:查询数据(最常用)

3.1 查询整张表

SELECT * FROM users;
  • * 表示所有列。
  • 初学/调试时用 * 很方便,但在正式项目中,推荐明确写出列名。

3.2 只查部分列

SELECT id, name, age FROM users;

3.3 使用 WHERE 过滤条件

-- 查询年龄大于等于 25 的用户
SELECT * FROM users WHERE age >= 25;

-- 查询叫“张三”的用户
SELECT * FROM users WHERE name = '张三';

常见比较运算符:

  • =<>!=><>=<=
  • BETWEEN x AND y:在某个区间内。

3.4 AND / OR 组合条件

-- 年龄在 20 到 30 之间,且邮箱不是 null
SELECT * FROM users
WHERE age BETWEEN 20 AND 30
  AND email IS NOT NULL;

-- 名字是“张三”或“李四”
SELECT * FROM users
WHERE name = '张三' OR name = '李四';

注意:

  • AND 的优先级高于 OR,复杂条件建议加括号。
  • 判断 NULL 要用 IS NULL / IS NOT NULL,不能用 =

3.5 模糊查询:LIKE

-- 名字以“张”开头
SELECT * FROM users WHERE name LIKE '张%';

-- 邮箱中包含“test”
SELECT * FROM users WHERE email LIKE '%test%';

通配符:

  • %:匹配任意长度的任意字符(包括 0 个字符)。
  • _:匹配任意单个字符。

3.6 排序:ORDER BY

-- 按年龄从小到大
SELECT * FROM users ORDER BY age ASC;

-- 按创建时间从新到旧
SELECT * FROM users ORDER BY created_at DESC;

3.7 限制条数:LIMIT

-- 只看前 5 条
SELECT * FROM users LIMIT 5;

-- 分页:跳过前面 10 条,再取 5 条
SELECT * FROM users ORDER BY id LIMIT 10, 5;
-- 等价写法:LIMIT 5 OFFSET 10;

四、UPDATE:更新数据

4.1 基本写法

-- 把 id 为 1 的用户年龄改为 21
UPDATE users
SET age = 21
WHERE id = 1;

说明:

  • SET 后面可以写多个字段:
UPDATE users
SET name = '新名字', age = 30
WHERE id = 2;

非常重要:UPDATE 一定要加 WHERE 条件!
否则可能把整张表所有行都改掉。

4.2 结合条件更新

-- 把年龄小于 18 的用户统一改为 18
UPDATE users
SET age = 18
WHERE age < 18;

五、DELETE:删除数据

5.1 删除满足条件的记录

-- 删除 id 为 3 的用户
DELETE FROM users WHERE id = 3;

-- 删除年龄大于 60 的用户
DELETE FROM users WHERE age > 60;

5.2 清空整张表(慎用)

-- 删除表中所有数据,但保留表结构
DELETE FROM users;

-- 更快的清空方式(同时重置自增主键)
TRUNCATE TABLE users;

再次强调:平时写 DELETE 几乎总是要带 WHERE,没有 WHERE 的 DELETE/UPDATE 都要非常小心。


六、综合练习:做一轮常见操作

假设现在你刚建完 users 表,可以按下面顺序熟悉一遍:

  1. 插入几条数据
INSERT INTO users (name, email, age) VALUES
('张三', 'zhangsan@test.com', 20),
('李四', 'lisi@test.com', 22),
('王五', 'wangwu@test.com', 25);
  1. 查询所有数据
SELECT * FROM users;
  1. 只看名字和年龄,并按年龄从大到小排
SELECT name, age FROM users ORDER BY age DESC;
  1. 把“张三”的年龄改为 21
UPDATE users SET age = 21 WHERE name = '张三';
  1. 删除年龄大于 23 的用户
DELETE FROM users WHERE age > 23;
  1. 再次查看所有数据
SELECT * FROM users;

如果你能在命令行里顺利跑完上面这些,并且能大致解释每条语句在干什么,就说明你已经基本掌握了 增(INSERT)删(DELETE)改(UPDATE)查(SELECT) 这四个最核心操作。


七、本篇小结(牢记四个单词)

  • INSERT:往表里插入数据。
  • SELECT:从表里查询数据。
  • UPDATE:修改已有数据。
  • DELETE:删除数据。

以后你在任何系统里看到“增删改查”这个词,基本上就是在说这四类操作。学会用它们操作表,就已经迈进了 MySQL 实战的大门。接下来可以看下一篇:多表查询与约束,学习关联多张表、保证数据正确性。+

上次编辑于:
贡献者: 15327360835
Loading...