数据库相关

原创
2015/09/29 13:48
阅读数 58

MySQL 中数据库引擎 Archive 与 Blackhole

在涉及到订单操作的时候,我们采用了 celery 来进行异步写入日志,以保证数据的安全。

遇到了一个数据库引擎 Archive,支持行级锁,不支持事务操作,支持并发插入,很适合用来当日志,但它只能进行 INSERT 和 SELECT 操作,不允许 UPDATE/REPLACE/DELETE 操作。

然后其实它也不允许 Truncate 操作,当我在测试完毕后想清空表时,就变得很蛋疼,必须删除表重建。

后来又发现了一个新的数据库引擎 Blackhole,它能像黑洞一样,吸收所有写入的数据。因此可以把 Archive 临时修改为 Blackhole 引擎,让 Blackhole 先把表中所有项目吸收进黑洞,使表变成了一张空表。这时再将引擎修改回 Archive,就可以达到跟 Truncate 一样的效果了。

删除操作 Truncate 与 Delete

这两个操作并不一样。

Delete 操作会被记录下来,而且是每行修改都会被记录,删除是物理性的删除。删除的时候只会删除没有外键约束的数据,被外键约束的行不会被删除。id 计数不会被重置。Delete 是可以跟上 Where 条件的。

Truncate 也会被记录下来,但是它不会物理地删除这些数据,只是做一下标志说这些位置可以被重新使用,所以 Truncate 的速度会更快。如果表中有外键约束存在,必须删除约束后再进行 Truncate,否则会失败。同时 Truncate 操作会重置 id 计数。Truncate 不能跟条件字段。

阿里云 RDS 控制面板中的清空表操作属于 Truncate。此处的删除指的是删除表中全部数据或某些数据,如果要删除整个表,包括表接口,可以使用 Drop 命令。

参考资料

  1. 如何选择MySQL存储引擎
展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部