Mysql——清空表之Delete与Truncate命令对比

一、Delete与Truncate清空表用法

  1. Delete
    语法:DELETE FROM table_name [WHERE Clause]
    当未指定where条件时为清空表中全部数据。
  2. Truncate
    语法:TRUNCATE [TABLE] table_name
    清空表中数据,同时重新初始化自增字段,即重新开始计数。

二、用法区别

  1. truncate用法删除整个表数据的同时重置自增字段自增值,而delete用法只删除整个表数据,不改变当前自增字段的自增值。(比如含自增id字段表的最后一条记录id为10,truncate后下一条插入的记录id将为1,而delete后下一条插入记录id将为11)
  2. truncate清空表效率比delete清空表效率高。
  3. truncate是DDL语言,执行后自动提交;delete是DML语言,执行后不会自动提交。
  4. delete操作能够回滚,truncate操作不能回滚。
  5. delete操作将触发on delete trigger,但truncate不会触发trigger。
  6. delete由于可使用where限定删除范围,因此delete相比truncate更灵活。
  7. delete操作会记录每一条删除记录进日志,而truncate只记录一次数据释放操作。

三、效率差异产生的原因

  • 在有where限定的情况下,delete是检索整个数据表符合where限定条件的记录进行删除,因此会逐条检查,并检查边删除。
    现在没有了where,但是delete的逻辑没有大变化,仍然是一行一行的检索后删除,只不过这时不用进行限定条件判断。
    而Truncate是直接删除整个表的数据,相当于先删除表后重新创建,因此truncate命令是需要表的drop权限的。
  • 以下是摘自oracle官方文档的内容
    在这里插入图片描述

四、官方文档链接

  1. mysql5.7下truncate table语句
  2. mysql5.7下delete from语句
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值