一、數據庫可重復讀這種隔離級別的意義
數據庫可重復讀這種隔離級別的意義是,repeatable read隔離級別確保在同一個事務中讀取同一行多次,得到的數據是穩定的,不會變化,即使這行被并發執行的事務修改了。這樣的保障是很多應用依賴的。
這也和業務場景有關。
比如財務對賬,某個時刻內,我讀取賬目來對賬之類的操作,這個時候肯定不希望讀到的數據再發生變化,比如讀已提交。這樣既保證當前業務繼續進行,又可以保證我在某一時刻內的操作不會有影響。相比較串行化的讀寫互斥的情況,性能和業務處理靈活性上要好一些。否則一旦查詢,其他操作無法進行,一般生產環境是不允許的。
延伸閱讀:
二、SQL TRUNCATE TABLE清空表語句
SQL TRUNCATE TABLE 語句用來刪除表中的所有記錄,也即清空表,它類似于不帶 WHERE 子句的 DELETE FROM 語句。
TRUNCATE TABLE 和?DROP TABLE
DROP TABLE 用來刪除表,包括刪除該表的數據、結構、索引、觸發器、約束等所有信息。一旦使用?DROP TABLE 刪除了表,則該表的所有信息都將丟失,該表再也無法使用了。如果您希望存儲一些數據,就只能重新創建該表。
TRUNCATE TABLE 僅僅刪除表的所有記錄,表的結構、索引、觸發器、約束等將被保留,后續仍然可以使用該表。
TRUNCATE TABLE 和 DELETE FROM
不帶 WHERE 子句的?DELETE FROM 語句同樣可以達到清空表的效果,但是?TRUNCATE TABLE 使用的系統資源和日志資源更少,因此比?DELETE FROM 更加快速。
DELETE FROM 語句每刪除一行,都會在事務日志中為所刪除的行記錄一項。TRUNCATE TABLE 通過釋放表中數據所用的數據頁來刪除數據,只會在事務日志中記錄頁的釋放。
此外,TRUNCATE TABLE 還能重置具有自動遞增(AUTO_INCREMENT)屬性的字段,而 DELETE FROM 卻不具備該功能。
總結
當您不再需要該表時,使用 DROP TABLE;當您仍要保留該表,只是想刪除所有記錄時,使用 TRUNCATE TABLE;當你要刪除部分記錄時,使用帶有 WHERE 子句的 DELETE FROM。