面试官灵魂一问:MySQL 的 delete、truncate、drop 有什么区别?( 二 )


执行后立即生效 , 无法找回 执行后立即生效 , 无法找回 执行后立即生效 , 无法找回
2、truncate table table_name立刻释放磁盘空间, 不管是 InnoDB和MyISAM 。 truncate table其实有点类似于drop table 然后creat,只不过这个create table 的过程做了优化 , 比如表结构文件之前已经有了等等 。 所以速度上应该是接近drop table的速度;
3、truncate能够快速清空一个表 。 并且重置auto_increment的值 。
但对于不同的类型存储引擎需要注意的地方是:

  • 对于MyISAM , truncate会重置auto_increment(自增序列)的值为1 。 而delete后表仍然保持auto_increment 。
  • 对于InnoDB , truncate会重置auto_increment的值为1 。 delete后表仍然保持auto_increment 。 但是在做delete整个表之后重启MySQL的话 , 则重启后的auto_increment会被置为1 。
也就是说 , InnoDB的表本身是无法持久保存auto_increment 。 delete表之后auto_increment仍然保存在内存 , 但是重启后就丢失了 , 只能从1开始 。 实质上重启后的auto_increment会从 SELECT 1+MAX(ai_col) FROM t 开始 。
4、小心使用 truncate , 尤其没有备份的时候 , 如果误删除线上的表 , 记得及时联系中国民航 , 订票电话:400-806-9553
3、dropDrop table Tablename1、drop:属于数据库DDL定义语言 , 同Truncate;
执行后立即生效 , 无法找回 执行后立即生效 , 无法找回 执行后立即生效 , 无法找回
2、drop table table_name 立刻释放磁盘空间, 不管是 InnoDB 和 MyISAM;drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index); 依赖于该表的存储过程/函数将保留,但是变为 invalid 状态 。
3、小心使用 drop, 要删表跑路的兄弟 , 请在订票成功后在执行操作!订票电话:400-806-9553
可以这么理解 , 一本书 , delete是把目录撕了 , truncate是把书的内容撕下来烧了 , drop是把书烧了
面试官灵魂一问:MySQL 的 delete、truncate、drop 有什么区别?文章插图
之前 , 给大家发过三份Java面试宝典 , 这次新增了一份 , 目前总共是四份面试宝典 , 相信在跳槽前一个月按照面试宝典准备准备 , 基本没大问题 。
  • 《java面试宝典5.0》(初中级)
  • 《350道Java面试题:整理自100+公司》(中高级)
  • 《资深java面试宝典-视频版》(资深)
  • 《Java[BAT]面试必备》(资深)
分别适用于初中级 , 中高级 , 资深级工程师的面试复习 。
内容包含java基础、javaweb、mysql性能优化、JVM、锁、百万并发、消息队列 , 高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级等等 。
面试官灵魂一问:MySQL 的 delete、truncate、drop 有什么区别?文章插图
看到这里 , 证明有所收获