MySQL中Truncate用法详解

 更新时间:2021年12月13日 11:56:32   作者:kun_行者  
Truncate是一个能够快速清空资料表内所有资料的SQL语法。这篇文章介绍了Truncate用法及注意事项,并和drop,delete方法进行对比。需要的朋友可以收藏下,方便下次浏览观看

前言:

当我们想要清空某张表时,往往会使用truncate语句。大多时候我们只关心能否满足需求,而不去想这类语句的使用场景及注意事项。本篇文章主要介绍truncate语句的使用方法及注意事项。

1.truncate使用语法

truncate的作用是清空表或者说是截断表,只能作用于表。truncate的语法很简单,后面直接跟表名即可,例如: truncate table tbl_name 或者 truncate tbl_name

执行truncate语句需要拥有表的drop权限,从逻辑上讲,truncate table类似于delete删除所有行的语句或drop table然后再create table语句的组合。为了实现高性能,它绕过了删除数据的DML方法,因此,它不能回滚。尽管truncate table与delete相似,但它被分类为DDL语句而不是DML语句。

2.truncate与drop,delete的对比

上面说过truncate与delete,drop很相似,其实这三者还是与很大的不同的,下面简单对比下三者的异同。

  • truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
  • truncate只能作用于表;delete,drop可作用于表、视图等。
  • truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
  • truncate会重置表的自增值;delete不会。
  • truncate不会激活与表有关的删除触发器;delete可以。
  • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。

3.truncate使用场景及注意事项

通过前面介绍,我们很容易得出truncate语句的使用场景,即该表数据完全不需要时可以用truncate。如果想删除部分数据用delete,注意带上where子句;如果想删除表,当然用drop;如果想保留表而将所有数据删除且和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate然后再重新插入数据。

无论怎样,truncate表都是高危操作,特别是在生产环境要更加小心,下面列出几点注意事项,希望大家使用时可以做下参考。

  • truncate无法通过binlog回滚。
  • truncate会清空所有数据且执行速度很快。
  • truncate不能对有外键约束引用的表使用。
  • 执行truncate需要drop权限,不建议给账号drop权限。
  • 执行truncate前一定要再三检查确认,最好提前备份下表数据。

以上所述是小编给大家介绍的MySQL中Truncate用法详解,希望对大家有所帮助。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)

    解决远程连接mysql很慢的方法(mysql_connect 打开连接慢)

    有次同事提出开发使用的mysql数据库连接很慢,因为我们的mysql开发数据库是单独一台机器部署的,所以认为可能是网络连接问题导致的。
    2011-07-07
  • SELECT * 效率低原理解析

    SELECT * 效率低原理解析

    这篇文章主要为大家介绍了SELECT * 效率低原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 重装mysql时3306端口被占用的解决方法

    重装mysql时3306端口被占用的解决方法

    如果在安装mysql中出现3306端口不能使用,已经被占用的过程,则需要将该端口号的进程释放即可,所以本文给大家介绍了重装mysql时3306端口被占用的解决方法,需要的朋友可以参考下
    2024-02-02
  • mysql批量插入insert语句的两种方法

    mysql批量插入insert语句的两种方法

    在MySQL中批量插入数据有几种方法,本文主要介绍了mysql批量插入insert语句的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • mysql IS NULL使用索引案例讲解

    mysql IS NULL使用索引案例讲解

    这篇文章主要介绍了mysql IS NULL使用索引案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 详解监听MySQL的binlog日志工具分析:Canal

    详解监听MySQL的binlog日志工具分析:Canal

    Canal主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL。接下来通过本文给大家介绍监听MySQL的binlog日志工具分析:Canal的相关知识,感兴趣的朋友一起看看吧
    2020-10-10
  • 在Python安装MySQL支持模块的方法

    在Python安装MySQL支持模块的方法

    这篇文章来给各位同学详细介绍关于在Python安装MySQL支持模块有需要了解的朋友可参考
    2013-08-08
  • mysql数据库添加用户及分配权限具体实现

    mysql数据库添加用户及分配权限具体实现

    这篇文章主要介绍了mysql数据库添加用户及分配权限的方法,需要的朋友可以参考下
    2014-02-02
  • MySQL查看版本的五种方法总结

    MySQL查看版本的五种方法总结

    在日常项目开发过程中,我们经常要连接自己的数据库,此时不知道数据库的版本是万万不可的,下面这篇文章主要给大家介绍了关于MySQL查看版本的五种方法,需要的朋友可以参考下
    2023-02-02
  • Mysql超详细讲解死锁问题的理解

    Mysql超详细讲解死锁问题的理解

    又到了金三银四的时候,大家都按耐不住内心的躁动,我在这里给大家分享下之前面试中遇到的一个知识点(死锁问题),如有不足,欢迎大佬们指点指点
    2022-03-03

最新评论