当前位置: 首页 > news >正文

TRUNCATE 关键字介绍

在 MySQL 中,TRUNCATE有两个完全不同的用途,需要根据上下文区分:


一、TRUNCATE TABLE —— 清空表数据

语法

sql

TRUNCATE TABLE 表名;

作用

  • 删除表中的所有数据,但保留表结构(字段、索引、约束等)

  • 相当于执行了DELETE FROM 表名(不带 WHERE),但速度更快

特点对比

特性TRUNCATEDELETE
删除所有数据✅(不带 WHERE)
保留表结构
执行速度极快较慢(逐行删除)
重置自增 ID✅ 重置为初始值❌ 不重置
可回滚(事务中)❌ 不可回滚(DDL 操作)✅ 可回滚
触发行级触发器❌ 不触发✅ 触发
释放磁盘空间✅ 释放❌ 不释放(需要 OPTIMIZE)
锁定方式表级锁行级锁

使用示例

sql

-- 清空 user 表的所有数据 TRUNCATE TABLE user; -- 只保留表结构,所有数据被删除,自增 ID 从 1 重新开始 INSERT INTO user (name) VALUES ('张三'); -- id = 1

⚠️ 注意事项

  1. TRUNCATE 是 DDL(数据定义语言)操作,不是 DML,无法回滚(即使在事务中)

  2. 如果有外键约束指向该表,TRUNCATE可能会报错:

    sql

    -- 错误示例 TRUNCATE TABLE orders; -- 如果 orders 表有子表引用,会报错: -- Cannot truncate a table referenced in a foreign key constraint

    解决方法:先删除外键约束,或用DELETE代替

  3. 无法带 WHERE 条件,必须全表清空

  4. 执行后,自增主键计数器会重置


二、TRUNCATE() —— 截断数字或日期

1. 截断数字(保留指定小数位)

sql

TRUNCATE(X, D)
  • X:要处理的数字

  • D:保留的小数位数

    • D > 0:保留 D 位小数

    • D = 0:保留整数部分

    • D < 0:将整数部分从倒数第 |D| 位开始归零

sql

SELECT TRUNCATE(123.4567, 2); -- 结果: 123.45 SELECT TRUNCATE(123.4567, 0); -- 结果: 123 SELECT TRUNCATE(123.4567, -1); -- 结果: 120 SELECT TRUNCATE(123.4567, -2); -- 结果: 100 SELECT TRUNCATE(-123.4567, 2); -- 结果: -123.45

ROUND()的区别

  • TRUNCATE()直接截断,不四舍五入

  • ROUND():四舍五入

sql

SELECT TRUNCATE(123.4567, 2); -- 123.45 SELECT ROUND(123.4567, 2); -- 123.46

2. 截断日期(MySQL 8.0+)

sql

TRUNCATE(date, unit)
  • 将日期按指定单位截断到该单位的开始边界

sql

SELECT TRUNCATE(NOW(), 'YEAR'); -- 2026-01-01 00:00:00 SELECT TRUNCATE(NOW(), 'MONTH'); -- 2026-07-01 00:00:00 SELECT TRUNCATE(NOW(), 'DAY'); -- 2026-07-13 00:00:00 SELECT TRUNCATE(NOW(), 'HOUR'); -- 2026-07-13 14:00:00

DATE_FORMAT()对比

sql

-- 获取当月第一天 SELECT TRUNCATE(NOW(), 'MONTH'); -- 更简洁 SELECT DATE_FORMAT(NOW(), '%Y-%m-01'); -- 传统写法

三、快速参考

用法语法作用示例
清空表TRUNCATE TABLE 表名删除所有数据,重置自增TRUNCATE TABLE users;
截断数字TRUNCATE(数字, 小数位)截断小数位,不四舍五入TRUNCATE(3.14159, 2)→ 3.14
截断日期TRUNCATE(日期, 单位)截断到日期边界TRUNCATE(NOW(), 'DAY')→ 当天 00:00:00

总结

  • 如果你的上下文是操作数据库表→ 用的是TRUNCATE TABLE,用来快速清空表

  • 如果你的上下文是处理数值或日期→ 用的是TRUNCATE()函数,用来截断数字小数位或日期精度

http://www.jsqmd.com/news/1181694/

相关文章:

  • 西安闲置名牌包包回收全攻略,从估价鉴定到当场收款完整操作指南 - 奢侈品回收测评
  • 2026年浙江食品级不锈钢离心泵如何选不踩雷?5家实测对比与避坑推荐 - 中国品牌企业推荐网
  • 豆包生成的表格如何导出 AI导出鸭,手慢无
  • 竞品公开数据监控:用 OpenClaw 定时抓取竞品公开信息并生成动态分析报告
  • 多GPU部署策略:如何扩展Kimi-K2.6-NVFP4到大规模集群
  • 2026嘉定区钻石回收实地调研白皮书|正规门店实测与透明变现实测指南 - 全国二奢机构参考
  • Dify如何调用工具
  • 别再手动写SQL!ChatGPT实时解析自然语言生成可执行查询语句(含安全沙箱机制与字段血缘追踪功能)
  • Python ORM框架入门:SQLAlchemy模型定义、增删改查与关联查询
  • coalsece 函数简介
  • 2026上海劳力士欧米茄卡地亚回收价格|正规门店推荐 - 奢品小当家
  • amd/gpt-oss-20b-BF16-da8w8-torchao-v0.17.0深度解析:CPU端高效部署的20B参数MoE模型来了!
  • 孤能子视角:三十六计之偷梁换柱——分辨率调控
  • Llama-3.2-1B_rai_1.7.1_npu_4K与其他Llama模型的终极对比分析指南
  • Iframe 全屏自适应: 从基础CSS到跨域动态高度的完整解决方案
  • 2026佛山名表回收标杆榜单首发|全域实测,正规变现首选 - 小蝶回收测评
  • 如何免费解锁WeMod高级功能:Wand-Enhancer终极完整指南
  • AI 3:LangChain与LangGraph介绍
  • dbrx-base-FP8-KV模型架构分析:揭秘6144维度、40层、48头注意力机制
  • QtScrcpy终极教程:如何用电脑键盘鼠标玩转手机游戏
  • 2026年昆山免熏蒸托盘生产厂家甄选:出口适配与稳定交付能力盘点 - 速递信息
  • nvfp4量化技术终极指南:Laguna-M.1模型压缩8倍性能无损的秘密
  • 找靠谱育秧土粉土机生产厂家 实体工厂选购全指南 - 热点品牌推荐
  • C++学习(11):拾遗-对9和10的复习_A
  • 合规治理落地实践:智能门锁如何解决网约房身份核验与权限管控难题
  • MySQL面试高频考点:索引优化、SQL执行计划、事务隔离级别与锁机制
  • 从零到一,实战驱动!《Python深度学习与智能车竞赛》全流程项目指南
  • League Akari:英雄联盟智能助手,3大核心功能提升游戏体验
  • LongCat-2.0架构设计原理:MoE与N-gram嵌入的协同优化策略
  • 2026安徽工贸职业技术学院单招复读班官方报名入口及操作指南 - 教育为先