做数据库开发也好,做安全运维也好,很多人都会碰到一个看似简单、实则很容易踩坑的问题:
我只是想把表清空,到底该用
DELETE,还是TRUNCATE?
表面上看,这俩都能把数据删掉。
但真正在项目里,它们的差别一点都不小:
- 执行效率不一样
- 事务行为不一样
- 自增主键表现不一样
- 使用场景也完全不同
另外,很多人还不知道,MySQL 里还有一个特别实用的骚操作:
用一条 SQL,快速复制一张表的结构和数据
这招在做测试环境、日志分析、应急取证、漏洞复现时特别方便。
今天这篇文章,就把这两个容易被忽略、但非常实用的知识点一次讲透:
CREATE TABLE ... AS SELECT快速建表DELETE和TRUNCATE的核心区别
照样是实战风格,带 SQL、带结果、带思维导图。
一、先准备测试表:学生表 + 三条数据
为了方便演示,我们先创建一张测试表t_student。
DROPTABLEIFEXISTSt_student;CREATETABLEt_student(snoINT(6)PRIMARYKEYAUTO_INCREMENT,snameVARCHAR(5)NOTNULL,sexCHAR(1)DEFAULT'男',ageINT(3),enterdateDATE,classnameVARCHAR(10),emailVARCHAR(15)UNIQUE);插入三条测试数据:
INSERTINTOt_studentVALUES(NULL,'张三','男',21,'2023-09-01','java01班','zs@126.com');INSERTINTOt_studentVALUES(NULL,'李四','男',21,'2023-09-01','java01班','ls@126.com');INSERTINTOt_studentVALUES(NULL,'露露','男',21,'2023-09-01','java01班'