事務就是要保證一組數據庫操作,要么全部成功劣摇,要么全部失敗荤懂。在 MySQL 中茁裙,事務支持是在引擎層實現的。
當數據庫上有多個事務同時執(zhí)行的時候节仿,就可能出現臟讀(dirty read)晤锥、不可重復讀(non-repeatable read)、幻讀(phantom read)的問題廊宪,為了解決這些問題查近,就有了“隔離級別”的概念。在談隔離級別之前挤忙,你首先要知道霜威,你隔離得越嚴實,效率就會越低册烈。因此很多時候戈泼,我們都要在二者之間尋找一個平衡點婿禽。SQL 標準的事務隔離級別包括:讀未提交(read uncommitted)、讀提交(read committed)大猛、可重復讀(repeatable read)和串行化(serializable )扭倾。
下面我逐一為你解釋:
讀未提交是指,一個事務還沒提交時挽绩,它做的變更就能被別的事務看到膛壹。
讀提交是指,一個事務提交之后唉堪,它做的變更才會被其他事務看到模聋。
可重復讀是指,一個事務執(zhí)行過程中看到的數據唠亚,總是跟這個事務在啟動時看到的數據是一致的链方。當然在可重復讀隔離級別下,未提交變更對其他事務也是不可見的灶搜。
串行化祟蚀,顧名思義是對于同一行記錄,“寫”會加“寫鎖”割卖,“讀”會加“讀鎖”前酿。當出現讀寫鎖沖突的時候,后訪問的事務必須等前一個事務執(zhí)行完成鹏溯,才能繼續(xù)執(zhí)行薪者。