mysql的增删改查是操作关系型数据库的核心基础,分别对应INSERT、DELETE、UPDATE、SELECT四个关键字,覆盖了对数据表中数据的新增、移除、修改和获取全场景需求。不管是简单的小项目还是复杂的企业级系统,这四个操作都是日常开发中使用频率最高的数据库交互方式。

操作前的准备工作
在进行增删改查操作前,需要先确保已经创建了对应的数据库和数据表。以下是创建测试库和测试表的示例SQL:
-- 创建测试数据库
CREATE DATABASE IF NOT EXISTS test_db;
-- 切换到测试数据库
USE test_db;
-- 创建用户表
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100)
);
插入数据(增)
插入数据使用INSERT关键字,支持单条插入和多条插入两种常见方式。
单条插入
语法格式为INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...),如果不指定字段名,需要按照表结构的所有字段顺序传值:
-- 指定字段插入
INSERT INTO user (username, age, email) VALUES ('张三', 25, 'zhangsan@ipipp.com');
-- 全字段插入,id是自增字段可以省略
INSERT INTO user VALUES (NULL, '李四', 30, 'lisi@ipipp.com');
多条插入
多条插入只需要在VALUES后面跟上多组值,用逗号分隔即可,效率比单条多次插入更高:
INSERT INTO user (username, age, email) VALUES
('王五', 22, 'wangwu@ipipp.com'),
('赵六', 28, 'zhaoliu@ipipp.com');
查询数据(查)
查询数据使用SELECT关键字,是四个操作中使用场景最丰富的。
基础查询
查询所有字段可以用*代替,也可以指定具体要查询的字段:
-- 查询所有数据 SELECT * FROM user; -- 查询指定字段 SELECT username, age FROM user;
条件查询
搭配WHERE子句可以添加过滤条件,支持等于、大于、小于、模糊匹配等多种条件:
-- 查询年龄大于25的用户 SELECT * FROM user WHERE age > 25; -- 查询用户名为张三的用户 SELECT * FROM user WHERE username = '张三'; -- 模糊查询邮箱包含ipipp的用户 SELECT * FROM user WHERE email LIKE '%ipipp%';
排序和分页
可以使用ORDER BY进行排序,LIMIT进行分页:
-- 按年龄升序排序 SELECT * FROM user ORDER BY age ASC; -- 按年龄降序排序,取前2条 SELECT * FROM user ORDER BY age DESC LIMIT 2; -- 分页查询,每页2条,查询第2页(偏移量为2) SELECT * FROM user LIMIT 2 OFFSET 2;
修改数据(改)
修改数据使用UPDATE关键字,必须搭配WHERE子句指定修改条件,否则会修改全表数据:
-- 修改张三的年龄为26 UPDATE user SET age = 26 WHERE username = '张三'; -- 同时修改多个字段,修改李四的年龄和邮箱 UPDATE user SET age = 31, email = 'new_lisi@ipipp.com' WHERE username = '李四';
删除数据(删)
删除数据使用DELETE关键字,同样必须搭配WHERE子句指定删除条件,避免误删全表数据:
-- 删除用户名为王五的数据 DELETE FROM user WHERE username = '王五'; -- 删除年龄小于23的用户 DELETE FROM user WHERE age < 23;
注意事项
- 执行DELETE和UPDATE操作时,一定要先确认WHERE条件是否正确,建议先使用SELECT查询条件匹配的数据,确认无误后再执行修改或删除操作。
- 插入数据时,字段的类型要和值的类型匹配,字符串类型的值需要用单引号包裹,数值类型不需要。
- 如果表名或者字段名是mysql的保留关键字,需要用反引号`包裹,比如表名是order时,需要写成`order`。
- 生产环境中尽量不要使用SELECT *查询所有字段,指定需要的字段可以减少数据传输量,提升查询效率。