SQL的隔離級(jí)別有四種,它們分別是讀未提交(read uncommitted)、讀已提交(read committed)、可重復(fù)讀(repetable read)?和?串行化(serializable)。下面分別來解釋一下。
讀未提交:讀未提交指的是一個(gè)事務(wù)在提交之前,它所做的修改就能夠被其他事務(wù)所看到。
讀已提交:讀已提交指的是一個(gè)事務(wù)在提交之后,它所做的變更才能夠讓其他事務(wù)看到。
可重復(fù)讀:可重復(fù)讀指的是一個(gè)事務(wù)在執(zhí)行的過程中,看到的數(shù)據(jù)是和啟動(dòng)時(shí)看到的數(shù)據(jù)是一致的。未提交的變更對(duì)其他事務(wù)不可見。
串行化:顧名思義是對(duì)于同一行記錄,寫會(huì)加寫鎖,讀會(huì)加讀鎖。當(dāng)出現(xiàn)讀寫鎖沖突的時(shí)候,后訪問的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成,才能繼續(xù)執(zhí)行。
這四個(gè)隔離級(jí)別可以解決臟讀、不可重復(fù)讀、幻象讀這三類問題??偨Y(jié)如下

其中隔離級(jí)別由低到高是:讀未提交 < 讀已提交 < 可重復(fù)讀 < 串行化
隔離級(jí)別越高,越能夠保證數(shù)據(jù)的完整性和一致性,但是對(duì)并發(fā)的性能影響越大。大多數(shù)數(shù)據(jù)庫的默認(rèn)級(jí)別是讀已提交(Read committed),比如 Sql Server、Oracle ,但是 MySQL 的默認(rèn)隔離級(jí)別是?可重復(fù)讀(repeatable-read)。