当前位置: 代码网 > it编程>数据库>Mysql > MySQL删除数据用法及区别详解(DELETE、TRUNCATE 和 DROP)

MySQL删除数据用法及区别详解(DELETE、TRUNCATE 和 DROP)

2025年11月14日 Mysql 我要评论
一、前言在 mysql 中,可以使用 delete、truncate 和 drop 语句来删除数据。这三者虽然都能达到删除数据的效果,但它们的作用范围、执行效率以及数据恢复能力存在差异。本文将介绍:d

一、前言

在 mysql 中,可以使用 deletetruncatedrop 语句来删除数据。这三者虽然都能达到删除数据的效果,但它们的作用范围、执行效率以及数据恢复能力存在差异。

本文将介绍:

  • deletetruncatedrop 的用法和区别
  • delete 语句的高级用法
  • 删除操作的注意事项和最佳实践

二、mysql 中的三种删除方式

1.delete语句

delete 语句用于删除表中符合条件的数据行,不删除表本身。

基本语法:

delete from 表名 where 条件;
  • 表名:要操作的表名称。
  • where 条件:指定要删除的记录,省略则删除所有记录。
  • 不加 where 会删除表中所有数据,但表结构仍然保留。

示例:

假设有以下表 users

create table users (
    id int primary key auto_increment,
    name varchar(50),
    age int,
    city varchar(50)
);

-- 插入测试数据
insert into users (name, age, city) values
('alice', 25, 'beijing'),
('bob', 30, 'shanghai'),
('charlie', 35, 'guangzhou');

删除指定行:

delete from users where name = 'bob';

✅ 结果:删除 name='bob' 的记录。

删除所有数据:

delete from users;

✅ 结果:清空表中数据,但表结构还在。

删除多行:

delete from users where age > 25;

✅ 结果:删除所有年龄大于 25 岁的用户。

2.truncate语句

truncate 语句用于清空表中的所有数据,但不会记录删除操作,效率比 delete 更高。

基本语法:

truncate table 表名;
  • 作用:清空表中的数据,但保留表结构。
  • 效率:比 delete 快,且释放表空间。
  • 自增 id 重置truncate 会将 auto_increment 重置为 1。

示例:

truncate table users;

✅ 结果:

  • 清空表数据。
  • id 自动增长重置为 1。

3.drop语句

drop 语句用于删除表本身,不仅数据被删除,表结构也会消失。

基本语法:

drop table 表名;
  • 作用:删除表及其数据,无法恢复。
  • 效率:速度快,但不可恢复。

示例:

drop table users;

✅ 结果:

  • users 被删除,数据和表结构都不存在。

三、delete高级用法

1. 使用delete删除多表数据(多表关联删除)

在多表关联查询时,可以使用 join 删除多个表中的数据。

基本语法:

delete 表别名 from 表1 as 别名1
join 表2 as 别名2 on 关联条件
where 条件;

示例:

假设有以下两张表:

  • orders(订单表)
  • customers(客户表)
create table customers (
    customer_id int primary key,
    name varchar(50)
);

create table orders (
    order_id int primary key,
    customer_id int,
    amount decimal(10,2),
    foreign key (customer_id) references customers(customer_id)
);

-- 插入数据
insert into customers values (1, 'alice'), (2, 'bob'), (3, 'charlie');
insert into orders values (1, 1, 100.50), (2, 2, 200.75), (3, 3, 300.25);

删除与bob相关的订单:

delete o from orders o
join customers c on o.customer_id = c.customer_id
where c.name = 'bob';

✅ 结果:

  • 删除 bob 相关的订单数据。

2. 使用limit限制删除条数

在删除大量数据时,可以使用 limit 限制删除的行数,防止误操作导致大量数据丢失。

基本语法:

delete from 表名 where 条件 limit n;

示例:

删除 users 表中的前两条记录:

delete from users order by id asc limit 2;

✅ 结果:

  • 仅删除两条数据,防止误删大量数据。

3. 使用order by和limit

在删除数据时,可以通过 order bylimit 指定删除顺序和数量。

示例:

删除年龄最大的 2 个用户:

delete from users
order by age desc
limit 2;

✅ 结果:

  • 删除年龄最大的两名用户。

四、delete与truncate的区别

对比项deletetruncate
数据删除方式按行删除整表清空
是否记录日志记录日志不记录日志
自增 id 重置不重置重置为 1
删除速度慢,逐行删除快,清空整表
是否可回滚可回滚(开启事务)不可回滚
触发器是否执行会触发不会触发
表空间释放不释放释放表空间

五、删除操作的注意事项

  1. 谨慎使用 delete 和 truncate

    • truncate 无法回滚,清空数据前要三思。
    • 在执行删除前,最好使用 select 确认数据范围。
  2. 使用事务防止误操作

    • 在执行大批量删除时,使用事务以便回滚:
    start transaction;
    delete from users where age > 30;
    rollback; -- 撤销操作
    commit;   -- 确认操作
    
  3. 备份数据

    • 删除操作前,备份重要数据,以防误删。

六、总结

在 mysql 中,删除数据主要使用以下三种方式:

  • delete:按条件删除数据,记录日志,可回滚。
  • truncate:清空表数据,不记录日志,不可回滚。
  • drop:删除表及数据,无法恢复。

高级用法:

  • 使用 limit 限制删除条数,防止误删大量数据。
  • 多表关联删除,提高操作灵活性。
  • 使用事务保护数据,防止误删不可恢复。

到此这篇关于mysql删除数据用法及区别的文章就介绍到这了,更多相关mysql删除数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com