以下文章来源于何先振,责编小何

表示清空表中的所有数据,但是表结构保留。
truncate table 表名;
举个栗子:
这张表有数据

清空表里面的内容

重新查看,没有任何数据

DCL语句中 COMMIT 和ROLLBACK的区别:
COMMIT:提交数据。一旦执行COMMIT,则数据就被永久保存在数据库中,意味着数据就不可以回滚。
ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。
对比TRUNCATE TABLE 和DELETE FROM
相同点:都可以实现对表中所有数据的删除,同时保留表结构。
不同点:
TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
DELETE FROM:一旦执行此操作,表数据可以全部清除(不带where)。同时,数据可以实现回滚。
DDL的操作一旦执行就不可以回滚。因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit=FALSE 的影响。
DML的操作默认情况,一旦执行,也是不可回滚。但是,如果在执行DML之前,执行了set autocommit=FALSE,则执行的DML操作就可以实现回滚。
演示:DELETE FROM
表中有数据

执行SET autocommit=FALSE

DELETE FROM 删除表中的数据

然后查询下,没有数据

执行ROLLBACK

继续执行,表中的数据又有了。

演示 TRUNCATE TABLE:
此时表中有数据

执行SET autocommit=FALSE

执行TRUNCATE TABLE

再去查,没有数据

执行ROLLBACK

再去查,数据没有恢复

阿里开发规范:
TRUNCATE TABLE 比DELETE 速度快,且使用的系统和事务日志资源少,但TRUNCATE 无事务且不触发TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句。
说明:TRUNCATE TABLE在功能上与不带WHERE子句的DELETE 语句相同。
扩展1:阿里巴巴《Java开发手册》之MySQL字段命名
表名、字段名必须使用小写字母或者数字,禁止出现数字开头,禁止两个下划线中间只出现数字。
正栗子:student_admin 、stu_config、leve_code。
反栗子:StudentAdmin、stuConfig、leve_2_code。
禁用保留字,如desc、range、match、delayed等,请参考MySQL官方保留字。
表必备三个字段:id、gmt_create,gmt_modified。其中id为主键自增长,gmt_create 创建时间,gmt_modified 更新时间。
表的命名最好遵循“业务名称_表的作用”。
库名与应用名称最好一致。
创建数据类型大小,要选择字符存储适合的长度。
扩展2:如何看待清空表、删除表等操作需谨慎
删除表结构和数据时需要先备份,避免失误后造成无法挽回的结果。
同样修改表结构时,也需要先备份。删除一个字段会把这个字段的表的数据也删掉。避免失误后造成无法挽回的结果,最好执行时先备份。
扩展3:MySQL8新特性-DDL的原子化
对比MySQL5.7:
创建数据库,创建这张表

同时删除两张表,但是没有book2这张表报错了

继续查看表,就算报错了也删掉了存在的表book1。

MySQL8.0:
创建数据库,创建表

同时删除这两张表,但是只有book1这张表,没有第二张表book2所以报错
报错后,存在的表也不会删除,说明这一条DDL语句,被看成一个整体,只要整体执行不成功,都不成功。这是MySQL8.0的新特性。






