一文读懂Mysql中TRUNCATE的基本知识

1. 基本知识

TRUNCATE 是 MySQL 中用于快速删除表中所有行的 SQL 命令

它不同于 DELETE 命令,TRUNCATE 不会逐行删除数据,而是快速地释放表的存储空间

优缺点TRUNCATEDELETE
速度更快,因为它不会逐行删除,直接重置表较慢,逐行删除,可能会触发触发器
日志记录较少,只记录页的释放,而不是每行每行操作都记录到日志中
事务不可回滚,不能在事务中使用可回滚,可以在事务中使用
自增计数重置自增计数不会重置自增计数
触发器不会触发触发器会触发触发器
外键约束需要删除所有引用可以删除部分行,只要遵循外键约束

注意事项

  • 不可恢复:使用 TRUNCATE 删除的数据无法恢复,因此在执行此命令前需要谨慎
  • 外键约束:如果表有外键引用,TRUNCATE 可能会失败,除非删除引用的外键关系
  • 权限要求:执行 TRUNCATE 需要对表的 DROP 权限
  • 自增字段:TRUNCATE 会将自增字段重置为初始值

2. Demo

-- 创建一个示例表
CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- 插入示例数据
INSERT INTO employees (name) VALUES ('Alice'), ('Bob'), ('Charlie');

-- 查看表中的数据
SELECT * FROM employees;

-- 使用 TRUNCATE 清空表
TRUNCATE TABLE employees;

-- 查看表中的数据
SELECT * FROM employees; -- 结果将为空

TRUNCATE 与其他方法的对比

方法用法特点
TRUNCATETRUNCATE TABLE table_name快速删除所有行,重置自增计数,不可回滚
DELETEDELETE FROM table_name删除特定行或所有行,可回滚,触发器会被触发
DROPDROP TABLE table_name删除整个表及其结构,不可恢复

通过上面的对比,可以选择合适的命令来满足特定的需求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值