在涉及到訂單操做的時候,咱們採用了 celery 來進行異步寫入日誌,以保證數據的安全。數據庫
遇到了一個數據庫引擎 Archive,支持行級鎖,不支持事務操做,支持併發插入,很適合用來當日志,但它只能進行 INSERT 和 SELECT 操做,不容許 UPDATE/REPLACE/DELETE 操做。安全
而後其實它也不容許 Truncate 操做,當我在測試完畢後想清空表時,就變得很蛋疼,必須刪除表重建。併發
後來又發現了一個新的數據庫引擎 Blackhole,它能像黑洞同樣,吸取全部寫入的數據。所以能夠把 Archive 臨時修改成 Blackhole 引擎,讓 Blackhole 先把表中全部項目吸取進黑洞,使表變成了一張空表。這時再將引擎修改回 Archive,就能夠達到跟 Truncate 同樣的效果了。異步
這兩個操做並不同。測試
Delete 操做會被記錄下來,並且是每行修改都會被記錄,刪除是物理性的刪除。刪除的時候只會刪除沒有外鍵約束的數據,被外鍵約束的行不會被刪除。id 計數不會被重置。Delete 是能夠跟上 Where 條件的。阿里雲
Truncate 也會被記錄下來,可是它不會物理地刪除這些數據,只是作一下標誌說這些位置能夠被從新使用,因此 Truncate 的速度會更快。若是表中有外鍵約束存在,必須刪除約束後再進行 Truncate,不然會失敗。同時 Truncate 操做會重置 id 計數。Truncate 不能跟條件字段。日誌
阿里雲 RDS 控制面板中的清空表操做屬於 Truncate。此處的刪除指的是刪除表中所有數據或某些數據,若是要刪除整個表,包括表接口,可使用 Drop 命令。blog