Transaction isolation levels

트랜잭션 격리 수준

Isolation levels determine when concurrent transactions can see each other’s changes.

···
html
<div class="demo"><div class="head"><b>T1 READ → T2 COMMIT → T1 READ</b><span id="level">read committed</span></div><div class="stage isolation"><div class="cell">T1 first<br><b>100</b></div><div class="cell">T2 writes<br><b>120</b></div><div class="cell last">T1 second<br><b id="seen">120</b></div></div><div class="foot"><span id="isostatus">new committed value visible</span><span>two readers</span></div></div>
css
*{box-sizing:border-box}.demo{width:min(96vw,820px);height:min(94vh,350px);padding:clamp(8px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);display:flex;flex-direction:column;gap:clamp(5px,1.5vmin,12px);font:600 clamp(12px,3.5vmin,15px)/1.25 var(--font-sans),sans-serif;overflow:hidden}.head,.foot,.row{display:flex;justify-content:space-between;align-items:center;gap:8px}.head b{color:var(--accent)}.head span,.foot,.muted{color:var(--muted)}.stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:8px}.cell,.pill{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(4px,1.2vmin,9px);text-align:center}.pill{border-radius:999px}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 17%,var(--surface))!important;color:var(--fg)!important}.bad{border-color:#e16a5d!important;background:color-mix(in srgb,#e16a5d 18%,var(--surface))!important}.foot{font-size:clamp(12px,3vmin,14px)}.isolation{justify-content:space-around}.isolation .cell{min-width:27%;line-height:1.4}.isolation b{font:700 clamp(19px,6vmin,28px) ui-monospace,monospace;color:var(--accent)}.last{transition:.25s}@media(max-width:400px){.isolation{gap:3px}.isolation .cell{min-width:30%;padding:3px}}
js
let n=0;function tick(){document.getElementById('level').textContent=n?'repeatable read':'read committed';document.getElementById('seen').textContent=n?'100':'120';document.getElementById('isostatus').textContent=n?'same snapshot remains':'new committed value visible';document.querySelector('.last').classList.toggle('on',!!n);n=1-n}tick();const t=setInterval(tick,1300);document.querySelector('.demo').onclick=()=>{clearInterval(t);tick()}

An isolation level defines which observations are allowed across concurrent transactions. A lower level can increase concurrency but may allow a repeated read within one transaction to return a different value.

The demo places a T2 commit between two T1 reads and compares the visible result. Exact guarantees differ across database engines, so check the engine documentation.

When to use

Choose an isolation level when concurrent updates or repeated reads affect business rules.

Open as page ↗