暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第23讲:清空表和扩展说明

何先振 2023-10-08
305

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


清空表



表示清空表中的所有数据,但是表结构保留。


    truncate table 表名;


    举个栗子:


    这张表有数据





    清空表里面的内容





    重新查看,没有任何数据





    commit和rollback



    DCL语句中 COMMIT 和ROLLBACK的区别:


    COMMIT:提交数据。一旦执行COMMIT,则数据就被永久保存在数据库中,意味着数据就不可以回滚。


    ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。



    truncate 和 delete



    对比TRUNCATE TABLE 和DELETE FROM


    相同点:都可以实现对表中所有数据的删除,同时保留表结构。


    不同点:


    TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。


    DELETE FROM:一旦执行此操作,表数据可以全部清除(不带where)。同时,数据可以实现回滚。



    DDL语句和DML语句



    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的新特性。






    推荐阅读书籍




    点击上方"何先振"关注并选择设为星标
    各类IT技术文章不会错过!

    文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论