华人澳洲中文论坛

热图推荐

    或许你连删除数据都不会

    [复制链接]

    2022-10-5 06:52:45 62 0

    来源 l 脚本之家(ID:jb51net)


    查看大图


    查看大图
    作者 | 朱钢
    出品 | 脚本之家(ID:jb51net)
    这两年 IT 界隔三岔五的泛起一次顺序员删库的旧事,这类删库跑路的行动往往会给受益公司形成很大的损失,乃至会致使一个公司的破产。咱们顺序员看到这种旧事的时分很大一部份会把它当做一个闲谈的摊子,然而各位读者你是不是想过这么一个问题:我知道怎么正确删库吗?看到这里估量有读者会觉得删库谁不会啊Delete一下呗。假如你这么想的话那就接着看这篇文章吧,在前面的内容中我将讲授数据库删除数据的形式以及原理。


    查看大图
    在 MySQL 中有三种删除数据的形式,分别是deletedroptruncate。这三种形式用起来简略,然而面前的原理和留意事项估量大部份开发人员其实不分明,上面我就来说解一下原理以及留意事项。
    Delete 是数据库 DML 操作言语,在删除数据的时分只会删除数据而不会删除数据所在表的表构造,而且在删除数据的时分会履行事务和触发trigger。并且假如你所使用的数据库引擎是 InnoDB 的话 MySQL 会在履行删除数据操作的时分只把数据标注为已删除而不去真实的删除数据,因此在这类状况下假如你使用 Delete 删除数据的时分会发现表大小并无改动。
    然而当你的数据库引擎是 MyISAM 的状况下履行 delete from table 语句会真实的删除表中的数据并释放空间的,假如你想让 MyISAM 引擎也能完成 InnoDB 引擎假删除的成果的话,你需求在 Delete 语句前面加之 Where 前提便可,例如 delete from user where age


    查看大图
    这时候确定有杠精的小敌人会说:“我就想使用 InnoDB 引擎,我也想释放被删除数据所占用的空间。”这类设法 MySQL 为咱们提供理解决计划,那就是optimize table语句,咱们来看一下例子:咱们用 Delete 语句删除表中一切的数据后咱们来查看一下当初这张表所占的空间大小(如下图)


    查看大图
    从上图中咱们能够看到咱们删除了 book 表中的一切数据,然而该表所占用的空间大小简直没产生变动。这时候咱们履行 optimize table 语句后再次查看表的空间大小,咱们发现表的大小变为了 0.02M,只剩下了表构造的大小了(如下图)


    查看大图
    咱们在用 Delete 语句删除数据的时分需求留意的是 delete 操作是一行一行的履行的,而且会将每行的删除日志记载在 redo 和 undo 表空间中以便利往后回滚和重做,这样就发生少量的日志进而占用少量的空间。因此当咱们在进行大范围删除数据的时分不倡议使用 Delete 语句。
    Tip:这里有一个对比无意思之处:虽然说被删除数据所占用的空间没有被释放,然而当咱们履行 Insert 操作的时分这部份未被释放的空间仍然是能够被重用的。truncate 和 drop
    truncate 是数据库 DDL 言语,它和 delete 最大的区分是它不走事务数据也不放在 rollback segment 里,同时也不会触发 trigger, 因此履行 truncate 语句后会当即删除指定的数据且无奈恢复,并释放数据所占用的空间(不论使用的数据库引擎是 InnoDB 仍是 MyISAM )。truncate 语句个别用于疾速清空表中数据并需求重置 auto_increment 值的状况。


    查看大图
    对于重置 auto_increment 值需求有如下两点留意:
    在使用 InnoDB 引擎的状况下假如使用 truncate autoincrement会重置为 1 ,然而假如使用 delete 则 autoincrement 在重启 MySQL 以前依然放弃以后值,重启之后重置为 1 ;
    在使用 MyISAM 引擎的状况下假如使用 truncate autoincrement会重置为 1 ,但若使用 delete 则 autoincrement 依然放弃以后值。
    drop 一样是数据库 DDL 言语,它和 truncate 同样一旦履行将当即删除表和依赖、触发器、索引,然而会保存和该表相干的存储进程以及函数,并将形态改成 invalid 。
    总结
    下面讲这么多简略总结一下:假如把表比方成一个包子的话,那末 delete 就是把馅从包子里拿出来放在别的盘子里,truncate 就是把馅从包子里拿出来吃掉,drop 就是间接把包子吃掉。
    删库的技巧学会了吗?

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    注册会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题21

    帖子27

    积分115

    图文推荐