MySQL 数据增删改操作
# MySQL 数据增删改操作
# 1. 添加数据
-- 使用 `insert into 表名(列名1, 列名2, ...) values (...), (...), ...;` 向表中插入数据
insert into 表名 (列名1, 列名2, 列名3)
values
(值1, 值2, 值3),
(值4, 值5, 值6);
-- 输出示例
Query OK, 2 rows affected (0.01 sec)
-- 解释:
-- 该命令用于向表中插入数据,可以一次插入多条记录。
-- 列名列表指定了插入数据对应的字段,`values` 后的每组括号表示一条记录。
-- 如果不指定列名,默认按表结构中的字段顺序插入数据,但推荐明确指定列名以避免错误。
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2. 删除数据
-- 使用 `delete from 表名 where 条件;` 删除符合条件的记录
delete from 表名 where 条件;
-- 输出示例
Query OK, 1 row affected (0.01 sec)
-- 解释:
-- 该命令会删除符合条件的记录,如果不加 `where` 条件将删除所有记录(需谨慎)。
-- `delete` 操作会影响原有数据,删除的数据不可恢复,建议操作前做好备份。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 3. 删除全部记录
-- 使用 `delete from 表名;` 删除表中的所有记录
delete from 表名;
-- 输出示例
Query OK, X rows affected (0.01 sec) -- X 表示被删除的记录数
-- 解释:
-- 该命令会删除表中的所有记录,但保留表结构和索引。与 `truncate` 不同,`delete` 会逐行删除并记录操作日志。
-- 删除大量数据时,`delete` 的性能不如 `truncate`,但适用于需要触发触发器或保留自增主键计数的场景。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 4. 删除表并创建一个同名的空表(效率更高)
-- 使用 `truncate table 表名;` 清空表中的所有数据并重置自增主键
truncate table 表名;
-- 输出示例
Query OK, 0 rows affected (0.01 sec)
-- 解释:
-- `truncate` 会快速删除所有记录,同时重置自增主键计数。与 `delete` 不同,`truncate` 不会触发触发器,也不会记录逐行删除日志。
-- 该操作与重新创建一个同名空表效果相同,但执行效率更高,适用于需要清空大量数据的场景。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 5. 修改数据
-- 使用 `update 表名 set 字段名1=值1, 字段名2=值2 where 条件;` 更新指定记录的数据
update 表名
set 字段名1 = 新值1,
字段名2 = 新值2
where 条件;
-- 输出示例
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- 解释:
-- `update` 命令用于修改符合条件的记录的字段值。`set` 子句指定要更新的字段及其新值,`where` 条件用于筛选要修改的记录。
-- 如果 `where` 条件缺失,将更新表中的所有记录(需谨慎)。
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 6. 批量插入数据
-- 使用 `insert into 表名 (列名1, 列名2, ...) values (...), (...), ...;` 一次性插入多条记录
insert into 表名 (列名1, 列名2, 列名3)
values
(值1, 值2, 值3),
(值4, 值5, 值6),
(值7, 值8, 值9);
-- 输出示例
Query OK, 3 rows affected (0.01 sec)
-- 解释:
-- 该命令可以一次性插入多条记录,减少数据库的交互次数,提高插入效率。
-- 如果表有自增主键,MySQL 会为每条记录自动分配自增 ID。
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 7. 插入或更新(防止重复插入)
-- 使用 `insert into ... on duplicate key update` 在插入数据时如果存在冲突则更新
insert into 表名 (列名1, 列名2)
values (值1, 值2)
on duplicate key update 列名2 = 新值2;
-- 输出示例
Query OK, 2 rows affected (0.01 sec)
-- 解释:
-- 当插入的数据违反唯一性约束(如主键或唯一索引)时,MySQL 将执行 `on duplicate key update` 子句中的更新操作。
-- 该命令常用于避免重复插入数据的场景,既可以插入新数据,也可以更新已有数据。
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 8. 删除重复数据
-- 使用 `delete from 表名 where 条件 and 子查询;` 删除重复记录
delete from 表名
where 条件 and id not in (
select min(id)
from 表名
group by 重复字段1, 重复字段2
);
-- 输出示例
Query OK, X rows affected (0.01 sec)
-- 解释:
-- 该命令用于删除表中的重复记录,只保留每组重复数据中的一条(通常按 ID 保留最小的记录)。
-- 具体删除逻辑可以根据实际需求调整,如根据其他字段判断重复。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 9. 条件删除数据(带子查询)
-- 使用 `delete from 表名 where 字段 in (子查询);` 删除符合子查询结果的数据
delete from 表名
where 字段名 in (
select 字段名
from 另一个表
where 条件
);
-- 输出示例
Query OK, X rows affected (0.02 sec)
-- 解释:
-- 该命令结合子查询,删除符合复杂条件的数据,例如根据其他表的结果来筛选需要删除的记录。
-- 使用子查询时,MySQL 会先执行子查询并缓存结果,然后再执行删除操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08