260 lines
72 KiB
HTML
260 lines
72 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
|
||
<title>Solutions to the Lost Update Problem | Sönke Ruempler</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||
<meta name="description" content="The Lost Update Problem is a common issue in concurrent systems, where two transactions read the same data, modify it, and write it back to the database. The second transaction will overwrite the chan">
|
||
<meta property="og:type" content="article">
|
||
<meta property="og:title" content="Solutions to the Lost Update Problem">
|
||
<meta property="og:url" content="https://ruempler.eu/2024/11/25/solutions-to-the-lost-update-problem/">
|
||
<meta property="og:site_name" content="Sönke Ruempler">
|
||
<meta property="og:description" content="The Lost Update Problem is a common issue in concurrent systems, where two transactions read the same data, modify it, and write it back to the database. The second transaction will overwrite the chan">
|
||
<meta property="og:locale">
|
||
<meta property="article:published_time" content="2024-11-25T11:00:00.000Z">
|
||
<meta property="article:modified_time" content="2026-09-06T09:37:40.000Z">
|
||
<meta property="article:author" content="Soenke Ruempler">
|
||
<meta name="twitter:card" content="summary">
|
||
<meta name="twitter:creator" content="@s0enke">
|
||
|
||
<link rel="alternate" href="/atom.xml" title="Sönke Ruempler" type="application/atom+xml">
|
||
|
||
|
||
<link rel="icon" href="/favicon.png">
|
||
|
||
|
||
<link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
|
||
|
||
|
||
<link rel="stylesheet" href="/css/style.css">
|
||
|
||
|
||
|
||
<link rel="canonical" href="https://ruempler.eu/2024/11/25/solutions-to-the-lost-update-problem/"/>
|
||
<meta name="generator" content="Hexo 8.1.1"></head>
|
||
|
||
<body>
|
||
<div id="container">
|
||
<div id="wrap">
|
||
<header id="header">
|
||
<div id="banner"></div>
|
||
<div id="header-outer" class="outer">
|
||
<div id="header-title" class="inner">
|
||
<h1 id="logo-wrap">
|
||
<a href="/" id="logo">Sönke Ruempler</a>
|
||
</h1>
|
||
|
||
<h2 id="subtitle-wrap">
|
||
<a href="/" id="subtitle">Cloud Architect and Software Engineer</a>
|
||
</h2>
|
||
|
||
</div>
|
||
<div id="header-inner" class="inner">
|
||
<nav id="main-nav">
|
||
<a id="main-nav-toggle" class="nav-icon"></a>
|
||
|
||
<a class="main-nav-link" href="/">Home</a>
|
||
|
||
<a class="main-nav-link" href="/categories/til">TIL</a>
|
||
|
||
<a class="main-nav-link" href="/contact">Contact</a>
|
||
|
||
</nav>
|
||
<nav id="sub-nav">
|
||
|
||
<a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
|
||
|
||
<a id="nav-search-btn" class="nav-icon" title="Search"></a>
|
||
</nav>
|
||
<div id="search-form-wrap">
|
||
<form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit"></button><input type="hidden" name="sitesearch" value="https://ruempler.eu"></form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</header>
|
||
<div class="outer">
|
||
<section id="main"><article id="post-solutions-to-the-lost-update-problem" class="article article-type-post" itemscope itemprop="blogPost">
|
||
<div class="article-meta">
|
||
<a href="/2024/11/25/solutions-to-the-lost-update-problem/" class="article-date">
|
||
<time datetime="2024-11-25T11:00:00.000Z" itemprop="datePublished">2024-11-25</time>
|
||
</a>
|
||
|
||
</div>
|
||
<div class="article-inner">
|
||
|
||
|
||
<header class="article-header">
|
||
|
||
|
||
<h1 class="article-title" itemprop="name">
|
||
Solutions to the Lost Update Problem
|
||
</h1>
|
||
|
||
|
||
</header>
|
||
|
||
<div class="article-entry" itemprop="articleBody">
|
||
|
||
<p>The <strong>Lost Update Problem</strong> is a common issue in concurrent systems, where two transactions read the same data, modify it, and write it back to the database. The second transaction will overwrite the changes made by the first transaction, causing the first transaction’s changes to be lost.</p>
|
||
<p>This is especially problematic in cases where money in a bank account is involved, as it can lead to inconsistencies in the account balance. A rather dramatic example of this is the <a href="https://www.reuters.com/article/technology/bitcoin-bank-flexcoin-shuts-after-hacking-theft-idUSBREA2329B/">Flexcoin bankruptcy</a>. </p>
|
||
<span id="more"></span>
|
||
|
||
<p>For example, in MySQL the default isolation level is <code>REPEATABLE READ</code>, which means that a transaction will read the same data multiple times and get the same result. However, this does not prevent the Lost Update Problem, as shown in this sequence diagram:</p>
|
||
<img src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGRhdGEtZGlhZ3JhbS10eXBlPSJTRVFVRU5DRSIgc3R5bGU9IndpZHRoOjEwODdweDtoZWlnaHQ6NjE0cHg7YmFja2dyb3VuZDojRkZGRkZGOyIgd2lkdGg9IjEwODdweCIgaGVpZ2h0PSI2MTRweCIgdmlld0JveD0iMCAwIDEwODcgNjE0IiB6b29tQW5kUGFuPSJtYWduaWZ5IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyI+PD9wbGFudHVtbCAxLjIwMjYuOGJldGExPz48ZGVmcy8+PGcgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGxlbmd0aEFkanVzdD0ic3BhY2luZyI+PGc+PHRpdGxlPkFsaWNlPC90aXRsZT48cmVjdCB4PSI1NC4yMjEiIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iNTMwLjkyMiIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjU3LjcyMSIgeTE9IjQxLjI5NyIgeDI9IjU3LjcyMSIgeTI9IjU3Mi4yMTkiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1kYXNoYXJyYXk6NSw1OyIvPjwvZz48Zz48dGl0bGU+REI8L3RpdGxlPjxyZWN0IHg9IjQzNC41OTciIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iNTMwLjkyMiIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjQzOC4wOTciIHkxPSI0MS4yOTciIHgyPSI0MzguMDk3IiB5Mj0iNTcyLjIxOSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxnPjx0aXRsZT5Cb2I8L3RpdGxlPjxyZWN0IHg9IjgxNC45NzQiIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iNTMwLjkyMiIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjgxOC40NzQiIHkxPSI0MS4yOTciIHgyPSI4MTguNDc0IiB5Mj0iNTcyLjIxOSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxyZWN0IHg9IjMzLjg4NyIgeT0iMTAiIHdpZHRoPSI0Ny42NjciIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSI0MC44ODciIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMzMuNjY3Ij5BbGljZTwvdGV4dD48cmVjdCB4PSI0MjAuOTA1IiB5PSIxMCIgd2lkdGg9IjM0LjM4NSIgaGVpZ2h0PSIzMC4yOTciIGZpbGw9IiNFMkUyRjAiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgcng9IjIuNSIgcnk9IjIuNSIvPjx0ZXh0IHg9IjQyNy45MDUiIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjAuMzg1Ij5EQjwvdGV4dD48cmVjdCB4PSI3OTcuOTQ1IiB5PSIxMCIgd2lkdGg9IjQxLjA1NyIgaGVpZ2h0PSIzMC4yOTciIGZpbGw9IiNFMkUyRjAiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgcng9IjIuNSIgcnk9IjIuNSIvPjx0ZXh0IHg9IjgwNC45NDUiIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjcuMDU3Ij5Cb2I8L3RleHQ+PHJlY3QgeD0iMzMuODg3IiB5PSI1NzIuMjE5IiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNDAuODg3IiB5PSI1OTIuMjE0IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIzMy42NjciPkFsaWNlPC90ZXh0PjxyZWN0IHg9IjQyMC45MDUiIHk9IjU3Mi4yMTkiIHdpZHRoPSIzNC4zODUiIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSI0MjcuOTA1IiB5PSI1OTIuMjE0IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyMC4zODUiPkRCPC90ZXh0PjxyZWN0IHg9Ijc5Ny45NDUiIHk9IjU3Mi4yMTkiIHdpZHRoPSI0MS4wNTciIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSI4MDQuOTQ1IiB5PSI1OTIuMjE0IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyNy4wNTciPkJvYjwvdGV4dD48cG9seWdvbiBwb2ludHM9IjQyNi4wOTcsODEuNTYzLDQzNi4wOTcsODUuNTYzLDQyNi4wOTcsODkuNTYzLDQzMC4wOTcsODUuNTYzIiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI1Ny43MjEiIHkxPSI4NS41NjMiIHgyPSI0MzIuMDk3IiB5Mj0iODUuNTYzIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iNjQuNzIxIiB5PSI2NS4zNjQiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1Ni4zNzYiPnNldCBzZXNzaW9uIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBlYXRhYmxlIHJlYWQ7PC90ZXh0Pjx0ZXh0IHg9IjY0LjcyMSIgeT0iODAuNDk3IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0MC43MzMiPmJlZ2luOzwvdGV4dD48cG9seWdvbiBwb2ludHM9IjQ0OS4wOTcsMTI1LjgyOCw0MzkuMDk3LDEyOS44MjgsNDQ5LjA5NywxMzMuODI4LDQ0NS4wOTcsMTI5LjgyOCIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iNDQzLjA5NyIgeTE9IjEyOS44MjgiIHgyPSI4MTcuNDc0IiB5Mj0iMTI5LjgyOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjQ1NS4wOTciIHk9IjEwOS42MjkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1Ni4zNzYiPnNldCBzZXNzaW9uIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCByZXBlYXRhYmxlIHJlYWQ7PC90ZXh0Pjx0ZXh0IHg9IjQ1NS4wOTciIHk9IjEyNC43NjIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjQwLjczMyI+YmVnaW47PC90ZXh0Pjxwb2x5Z29uIHBvaW50cz0iNDI2LjA5NywxNTQuOTYxLDQzNi4wOTcsMTU4Ljk2MSw0MjYuMDk3LDE2Mi45NjEsNDMwLjA5NywxNTguOTYxIiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI1Ny43MjEiIHkxPSIxNTguOTYxIiB4Mj0iNDMyLjA5NyIgeTI9IjE1OC45NjEiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSI2NC43MjEiIHk9IjE1My44OTUiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjIxNC41ODMiPnNlbGVjdCAqIGZyb20gZW50cnkgd2hlcmUgaWQgPSAxOzwvdGV4dD48cGF0aCBkPSJNMTUsMTcxLjk2MSBMMTUsMjMwLjk2MSBMMTAwLDIzMC45NjEgTDEwMCwxODEuOTYxIEw5MCwxNzEuOTYxIEwxNSwxNzEuOTYxIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNOTAsMTcxLjk2MSBMOTAsMTgxLjk2MSBMMTAwLDE4MS45NjEgTDkwLDE3MS45NjEiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjIxIiB5PSIxODkuMDI4IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0NS4xMzIiPlJlc3VsdDo8L3RleHQ+PHRleHQgeD0iMjUuMTMyIiB5PSIyMDYuMTYxIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjIwNi4xNjEiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iMjkuMjY1IiB5PSIyMjEuMjkzIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4xPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjIyMS4yOTMiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjE2LjU0MiI+MTA8L3RleHQ+PGxpbmUgeDE9IjIxIiB5MT0iMTk0LjA5NCIgeDI9Ijg1LjQ0MSIgeTI9IjE5NC4wOTQiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyMSIgeTE9IjIwOS4yMjciIHgyPSI4NS40NDEiIHkyPSIyMDkuMjI3IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMjEiIHkxPSIyMjQuMzU5IiB4Mj0iODUuNDQxIiB5Mj0iMjI0LjM1OSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIxIiB5MT0iMTk0LjA5NCIgeDI9IjIxIiB5Mj0iMjI0LjM1OSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjQxLjY2OCIgeTE9IjE5NC4wOTQiIHgyPSI0MS42NjgiIHkyPSIyMjQuMzU5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iODUuNDQxIiB5MT0iMTk0LjA5NCIgeDI9Ijg1LjQ0MSIgeTI9IjIyNC4zNTkiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxwb2x5Z29uIHBvaW50cz0iNDI2LjA5NywyNjguNjI1LDQzNi4wOTcsMjcyLjYyNSw0MjYuMDk3LDI3Ni42MjUsNDMwLjA5NywyNzIuNjI1IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI1Ny43MjEiIHkxPSIyNzIuNjI1IiB4Mj0iNDMyLjA5NyIgeTI9IjI3Mi42MjUiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSI2NC43MjEiIHk9IjI1Mi40MjYiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjMxNS45OTMiPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSB2YWx1ZSAtIDUgd2hlcmUgaWQgPSAxOzwvdGV4dD48dGV4dCB4PSI2NC43MjEiIHk9IjI2Ny41NTkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjUzLjUxNyI+Y29tbWl0OzwvdGV4dD48cGF0aCBkPSJNMTUsMjg1LjYyNSBMMTUsMzQ0LjYyNSBMMTAwLDM0NC42MjUgTDEwMCwyOTUuNjI1IEw5MCwyODUuNjI1IEwxNSwyODUuNjI1IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNOTAsMjg1LjYyNSBMOTAsMjk1LjYyNSBMMTAwLDI5NS42MjUgTDkwLDI4NS42MjUiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjIxIiB5PSIzMDIuNjkyIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0NS4xMzIiPlJlc3VsdDo8L3RleHQ+PHRleHQgeD0iMjUuMTMyIiB5PSIzMTkuODI1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjMxOS44MjUiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iMjkuMjY1IiB5PSIzMzQuOTU4IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4xPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjMzNC45NTgiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjU8L3RleHQ+PGxpbmUgeDE9IjIxIiB5MT0iMzA3Ljc1OCIgeDI9Ijg1LjQ0MSIgeTI9IjMwNy43NTgiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyMSIgeTE9IjMyMi44OTEiIHgyPSI4NS40NDEiIHkyPSIzMjIuODkxIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMjEiIHkxPSIzMzguMDIzIiB4Mj0iODUuNDQxIiB5Mj0iMzM4LjAyMyIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIxIiB5MT0iMzA3Ljc1OCIgeDI9IjIxIiB5Mj0iMzM4LjAyMyIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjQxLjY2OCIgeTE9IjMwNy43NTgiIHgyPSI0MS42NjgiIHkyPSIzMzguMDIzIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iODUuNDQxIiB5MT0iMzA3Ljc1OCIgeDI9Ijg1LjQ0MSIgeTI9IjMzOC4wMjMiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxwb2x5Z29uIHBvaW50cz0iNDQ5LjA5NywzNjcuMTU2LDQzOS4wOTcsMzcxLjE1Niw0NDkuMDk3LDM3NS4xNTYsNDQ1LjA5NywzNzEuMTU2IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI0NDMuMDk3IiB5MT0iMzcxLjE1NiIgeDI9IjgxNy40NzQiIHkyPSIzNzEuMTU2IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iNDU1LjA5NyIgeT0iMzY2LjA5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIyMTQuNTgzIj5zZWxlY3QgKiBmcm9tIGVudHJ5IHdoZXJlIGlkID0gMTs8L3RleHQ+PHBhdGggZD0iTTU2NS4zMjIsMzg0LjE1NiBMNTY1LjMyMiw0NDMuMTU2IEwxMDcxLjMyMiw0NDMuMTU2IEwxMDcxLjMyMiwzOTQuMTU2IEwxMDYxLjMyMiwzODQuMTU2IEw1NjUuMzIyLDM4NC4xNTYiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjxwYXRoIGQ9Ik0xMDYxLjMyMiwzODQuMTU2IEwxMDYxLjMyMiwzOTQuMTU2IEwxMDcxLjMyMiwzOTQuMTU2IEwxMDYxLjMyMiwzODQuMTU2IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSI1NzEuMzIyIiB5PSI0MDEuMjIzIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0ODUuMzA0Ij5Cb2Igc3RpbGwgc2VlcyB0aGUgaW5pdGlhbCB2YWx1ZSwgc2luY2UgaGUgaXMgaXNvbGF0ZWQgZnJvbSBBbGljZSdzIHRyYW5zYWN0aW9uOjwvdGV4dD48dGV4dCB4PSI1NzUuNDU0IiB5PSI0MTguMzU2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjU5Ni4xMjIiIHk9IjQxOC4zNTYiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iNTc5LjU4NiIgeT0iNDMzLjQ4OSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyI+MTwvdGV4dD48dGV4dCB4PSI1OTYuMTIyIiB5PSI0MzMuNDg5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxNi41NDIiPjEwPC90ZXh0PjxsaW5lIHgxPSI1NzEuMzIyIiB5MT0iNDA2LjI4OSIgeDI9IjYzNS43NjMiIHkyPSI0MDYuMjg5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iNTcxLjMyMiIgeTE9IjQyMS40MjIiIHgyPSI2MzUuNzYzIiB5Mj0iNDIxLjQyMiIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjU3MS4zMjIiIHkxPSI0MzYuNTU1IiB4Mj0iNjM1Ljc2MyIgeTI9IjQzNi41NTUiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI1NzEuMzIyIiB5MT0iNDA2LjI4OSIgeDI9IjU3MS4zMjIiIHkyPSI0MzYuNTU1IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iNTkxLjk5IiB5MT0iNDA2LjI4OSIgeDI9IjU5MS45OSIgeTI9IjQzNi41NTUiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI2MzUuNzYzIiB5MT0iNDA2LjI4OSIgeDI9IjYzNS43NjMiIHkyPSI0MzYuNTU1IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48cG9seWdvbiBwb2ludHM9IjQ0OS4wOTcsNDgwLjgyLDQzOS4wOTcsNDg0LjgyLDQ0OS4wOTcsNDg4LjgyLDQ0NS4wOTcsNDg0LjgyIiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI0NDMuMDk3IiB5MT0iNDg0LjgyIiB4Mj0iODE3LjQ3NCIgeTI9IjQ4NC44MiIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjQ1NS4wOTciIHk9IjQ2NC42MjIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjMyNC4yNjQiPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSB2YWx1ZSAtIDEwIHdoZXJlIGlkID0gMTs8L3RleHQ+PHRleHQgeD0iNDU1LjA5NyIgeT0iNDc5Ljc1NCIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNTMuNTE3Ij5jb21taXQ7PC90ZXh0PjxwYXRoIGQ9Ik03MDUuOTAzLDQ5Ny44MiBMNzA1LjkwMyw1NTYuODIgTDkzMC45MDMsNTU2LjgyIEw5MzAuOTAzLDUwNy44MiBMOTIwLjkwMyw0OTcuODIgTDcwNS45MDMsNDk3LjgyIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNOTIwLjkwMyw0OTcuODIgTDkyMC45MDMsNTA3LjgyIEw5MzAuOTAzLDUwNy44MiBMOTIwLjkwMyw0OTcuODIiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjcxMS45MDMiIHk9IjUxNC44ODciIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjIwNC4xNDEiPkJvYiBvdmVyd3JvdGUgQWxpY2UncyBjaGFuZ2VzOjwvdGV4dD48dGV4dCB4PSI3MTYuMDM2IiB5PSI1MzIuMDIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjExLjg2NCI+aWQ8L3RleHQ+PHRleHQgeD0iNzM2LjcwNCIgeT0iNTMyLjAyIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIzNS41MDkiPnZhbHVlPC90ZXh0Pjx0ZXh0IHg9IjcyMC4xNjgiIHk9IjU0Ny4xNTMiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjE8L3RleHQ+PHRleHQgeD0iNzM2LjcwNCIgeT0iNTQ3LjE1MyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyI+MDwvdGV4dD48bGluZSB4MT0iNzExLjkwMyIgeTE9IjUxOS45NTMiIHgyPSI3NzYuMzQ1IiB5Mj0iNTE5Ljk1MyIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjcxMS45MDMiIHkxPSI1MzUuMDg2IiB4Mj0iNzc2LjM0NSIgeTI9IjUzNS4wODYiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI3MTEuOTAzIiB5MT0iNTUwLjIxOSIgeDI9Ijc3Ni4zNDUiIHkyPSI1NTAuMjE5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iNzExLjkwMyIgeTE9IjUxOS45NTMiIHgyPSI3MTEuOTAzIiB5Mj0iNTUwLjIxOSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjczMi41NzEiIHkxPSI1MTkuOTUzIiB4Mj0iNzMyLjU3MSIgeTI9IjU1MC4yMTkiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI3NzYuMzQ1IiB5MT0iNTE5Ljk1MyIgeDI9Ijc3Ni4zNDUiIHkyPSI1NTAuMjE5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48P3BsYW50dW1sLXNyYyBoTDUxUWlDbTRCcGg1TkNoYjBSZ0dvdXNBSUphMUp0ZDhqbFJNMjFCR1Jqc0FGWm5iTW9kOTZ2ZlFBZDFyaEJVY1BxUFJRc2YyQWlOeDdWOG1JSm5QSlJVR085c2gyajlqTTVsekxYUHdpYVlxOGNxd0Q5SUI3TFQ3NW45SC1DQWpWRmJfdjVqNXplaUxPOTdsME5WV2ZvNFR2bVIyV0hKT3VFaUtDZnY4VllVMGFRZTBidzlFb2p2aDhPcURnM05qWUNDT21EUF82SkZZQy1Xb0RMOFVBS01VeGpKaElGamozMXZjWVdzeXhkMi1iUjZtTE0tUk90eUtTendBVVNzcWJ6YTQ4NGdhSUsyNWNEalgxRDNjWlpqWjFYamYtckZPRUVZdVRKZC1OUWVkYlFDa1hfdS1seG9hVklCXzl5MmxSUG1EeXc4bHZfZG5UbGFCaE5FOFZzeXdBcVF4T3g0LUpwcVpUZkZsR2t2N20wMD8+PC9nPjwvc3ZnPg=='>
|
||
|
||
<p>Fortunately, there are several ways to solve the Lost Update Problem:</p>
|
||
<h2 id="Isolation-Level-SERIALIZABLE"><a href="#Isolation-Level-SERIALIZABLE" class="headerlink" title="Isolation Level SERIALIZABLE"></a>Isolation Level <code>SERIALIZABLE</code></h2><p><code>SERIALIZABLE</code> is the strictest isolation level, which prevents the Lost Update Problem by bailing out transactions that would cause conflicts:</p>
|
||
<img src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGRhdGEtZGlhZ3JhbS10eXBlPSJTRVFVRU5DRSIgc3R5bGU9IndpZHRoOjEyNTNweDtoZWlnaHQ6NDI3cHg7YmFja2dyb3VuZDojRkZGRkZGOyIgd2lkdGg9IjEyNTNweCIgaGVpZ2h0PSI0MjdweCIgdmlld0JveD0iMCAwIDEyNTMgNDI3IiB6b29tQW5kUGFuPSJtYWduaWZ5IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyI+PD9wbGFudHVtbCAxLjIwMjYuOGJldGExPz48ZGVmcy8+PGcgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGxlbmd0aEFkanVzdD0ic3BhY2luZyI+PGc+PHRpdGxlPkFsaWNlPC90aXRsZT48cmVjdCB4PSIyMDEuMTMxIiB5PSI0MS4yOTciIHdpZHRoPSI4IiBoZWlnaHQ9IjM0My41OTQiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMCIvPjxsaW5lIHgxPSIyMDQuNjMxIiB5MT0iNDEuMjk3IiB4Mj0iMjA0LjYzMSIgeTI9IjM4NC44OTEiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1kYXNoYXJyYXk6NSw1OyIvPjwvZz48Zz48dGl0bGU+REI8L3RpdGxlPjxyZWN0IHg9IjU1MC44OTkiIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iMzQzLjU5NCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjU1NC4zOTkiIHkxPSI0MS4yOTciIHgyPSI1NTQuMzk5IiB5Mj0iMzg0Ljg5MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxnPjx0aXRsZT5Cb2I8L3RpdGxlPjxyZWN0IHg9IjkwMC42NjciIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iMzQzLjU5NCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjkwNC4xNjciIHkxPSI0MS4yOTciIHgyPSI5MDQuMTY3IiB5Mj0iMzg0Ljg5MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxyZWN0IHg9IjE4MC43OTciIHk9IjEwIiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iMTg3Ljc5NyIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIzMy42NjciPkFsaWNlPC90ZXh0PjxyZWN0IHg9IjUzNy4yMDciIHk9IjEwIiB3aWR0aD0iMzQuMzg1IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNTQ0LjIwNyIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyMC4zODUiPkRCPC90ZXh0PjxyZWN0IHg9Ijg4My42MzkiIHk9IjEwIiB3aWR0aD0iNDEuMDU3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iODkwLjYzOSIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyNy4wNTciPkJvYjwvdGV4dD48cmVjdCB4PSIxODAuNzk3IiB5PSIzODQuODkxIiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iMTg3Ljc5NyIgeT0iNDA0Ljg4NiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMzMuNjY3Ij5BbGljZTwvdGV4dD48cmVjdCB4PSI1MzcuMjA3IiB5PSIzODQuODkxIiB3aWR0aD0iMzQuMzg1IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNTQ0LjIwNyIgeT0iNDA0Ljg4NiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjAuMzg1Ij5EQjwvdGV4dD48cmVjdCB4PSI4ODMuNjM5IiB5PSIzODQuODkxIiB3aWR0aD0iNDEuMDU3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iODkwLjYzOSIgeT0iNDA0Ljg4NiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjcuMDU3Ij5Cb2I8L3RleHQ+PHBvbHlnb24gcG9pbnRzPSI1NDIuMzk5LDgxLjU2Myw1NTIuMzk5LDg1LjU2Myw1NDIuMzk5LDg5LjU2Myw1NDYuMzk5LDg1LjU2MyIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iMjA0LjYzMSIgeTE9Ijg1LjU2MyIgeDI9IjU0OC4zOTkiIHkyPSI4NS41NjMiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSIyMTEuNjMxIiB5PSI2NS4zNjQiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjMyNS43NjgiPnNldCBzZXNzaW9uIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCBzZXJpYWxpemFibGU7PC90ZXh0Pjx0ZXh0IHg9IjIxMS42MzEiIHk9IjgwLjQ5NyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNDAuNzMzIj5iZWdpbjs8L3RleHQ+PHBvbHlnb24gcG9pbnRzPSI1NjUuMzk5LDEyNS44MjgsNTU1LjM5OSwxMjkuODI4LDU2NS4zOTksMTMzLjgyOCw1NjEuMzk5LDEyOS44MjgiIGZpbGw9IiMxODE4MTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7Ii8+PGxpbmUgeDE9IjU1OS4zOTkiIHkxPSIxMjkuODI4IiB4Mj0iOTAzLjE2NyIgeTI9IjEyOS44MjgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSI1NzEuMzk5IiB5PSIxMDkuNjI5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIzMjUuNzY4Ij5zZXQgc2Vzc2lvbiB0cmFuc2FjdGlvbiBpc29sYXRpb24gbGV2ZWwgc2VyaWFsaXphYmxlOzwvdGV4dD48dGV4dCB4PSI1NzEuMzk5IiB5PSIxMjQuNzYyIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0MC43MzMiPmJlZ2luOzwvdGV4dD48cG9seWdvbiBwb2ludHM9IjU0Mi4zOTksMTU0Ljk2MSw1NTIuMzk5LDE1OC45NjEsNTQyLjM5OSwxNjIuOTYxLDU0Ni4zOTksMTU4Ljk2MSIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iMjA0LjYzMSIgeTE9IjE1OC45NjEiIHgyPSI1NDguMzk5IiB5Mj0iMTU4Ljk2MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjIxMS42MzEiIHk9IjE1My44OTUiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjIxNC41ODMiPnNlbGVjdCAqIGZyb20gZW50cnkgd2hlcmUgaWQgPSAxOzwvdGV4dD48cGF0aCBkPSJNMTUsMTcxLjk2MSBMMTUsMjExLjk2MSBMMzk0LDIxMS45NjEgTDM5NCwxODEuOTYxIEwzODQsMTcxLjk2MSBMMTUsMTcxLjk2MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiBmaWxsPSIjRkVGRkREIi8+PHBhdGggZD0iTTM4NCwxNzEuOTYxIEwzODQsMTgxLjk2MSBMMzk0LDE4MS45NjEgTDM4NCwxNzEuOTYxIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSIyMSIgeT0iMTg5LjAyOCIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMzU4LjI2MiI+QWxpY2UncyB0cmFuc2FjdGlvbiBub3cgaG9sZHMgYSBzaGFyZWQgbG9jayBvbiB0aGUgcm93LjwvdGV4dD48dGV4dCB4PSIyMSIgeT0iMjA0LjE2MSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMjY5LjA1OCI+SXQncyB0aGUgc2FtZSBhcyBgU0VMRUNUIC4uLiBGT1IgU0hBUkVgLjwvdGV4dD48cG9seWdvbiBwb2ludHM9IjU2NS4zOTksMjM0LjM1OSw1NTUuMzk5LDIzOC4zNTksNTY1LjM5OSwyNDIuMzU5LDU2MS4zOTksMjM4LjM1OSIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iNTU5LjM5OSIgeTE9IjIzOC4zNTkiIHgyPSI5MDMuMTY3IiB5Mj0iMjM4LjM1OSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjU3MS4zOTkiIHk9IjIzMy4yOTMiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjIxNC41ODMiPnNlbGVjdCAqIGZyb20gZW50cnkgd2hlcmUgaWQgPSAxOzwvdGV4dD48cGF0aCBkPSJNODIxLjY4NSwyNTEuMzU5IEw4MjEuNjg1LDI3Ni4zNTkgTDk4NS42ODUsMjc2LjM1OSBMOTg1LjY4NSwyNjEuMzU5IEw5NzUuNjg1LDI1MS4zNTkgTDgyMS42ODUsMjUxLjM1OSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiBmaWxsPSIjRkVGRkREIi8+PHBhdGggZD0iTTk3NS42ODUsMjUxLjM1OSBMOTc1LjY4NSwyNjEuMzU5IEw5ODUuNjg1LDI2MS4zNTkgTDk3NS42ODUsMjUxLjM1OSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiBmaWxsPSIjRkVGRkREIi8+PHRleHQgeD0iODI3LjY4NSIgeT0iMjY4LjQyNiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMTQzLjk2NSI+Qm9iIGNhbiByZWFkIHRoZSByb3cuPC90ZXh0Pjxwb2x5Z29uIHBvaW50cz0iNTQyLjM5OSwyOTguNjI1LDU1Mi4zOTksMzAyLjYyNSw1NDIuMzk5LDMwNi42MjUsNTQ2LjM5OSwzMDIuNjI1IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSIyMDQuNjMxIiB5MT0iMzAyLjYyNSIgeDI9IjU0OC4zOTkiIHkyPSIzMDIuNjI1IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iMjExLjYzMSIgeT0iMjk3LjU1OSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMjgyLjYxNyI+dXBkYXRlIGVudHJ5IHNldCB2YWx1ZSA9ICdUMScgd2hlcmUgaWQgPSAxOzwvdGV4dD48cG9seWdvbiBwb2ludHM9IjU2NS4zOTksMzI3Ljc1OCw1NTUuMzk5LDMzMS43NTgsNTY1LjM5OSwzMzUuNzU4LDU2MS4zOTksMzMxLjc1OCIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iNTU5LjM5OSIgeTE9IjMzMS43NTgiIHgyPSI5MDMuMTY3IiB5Mj0iMzMxLjc1OCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjU3MS4zOTkiIHk9IjMyNi42OTIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjI4Mi42MTciPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSAnVDInIHdoZXJlIGlkID0gMTs8L3RleHQ+PHBhdGggZD0iTTU3MC4zNzUsMzQ0Ljc1OCBMNTcwLjM3NSwzNjkuNzU4IEwxMjM3LjM3NSwzNjkuNzU4IEwxMjM3LjM3NSwzNTQuNzU4IEwxMjI3LjM3NSwzNDQuNzU4IEw1NzAuMzc1LDM0NC43NTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjxwYXRoIGQ9Ik0xMjI3LjM3NSwzNDQuNzU4IEwxMjI3LjM3NSwzNTQuNzU4IEwxMjM3LjM3NSwzNTQuNzU4IEwxMjI3LjM3NSwzNDQuNzU4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSI1NzYuMzc1IiB5PSIzNjEuODI1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI2NDYuNTg1Ij5Cb2IgZ2V0JyBhbiBlcnJvcjogWzQwMDAxXVsxMjEzXSBEZWFkbG9jayBmb3VuZCB3aGVuIHRyeWluZyB0byBnZXQgbG9jazsgdHJ5IHJlc3RhcnRpbmcgdHJhbnNhY3Rpb248L3RleHQ+PD9wbGFudHVtbC1zcmMgaFA1RlFtOG40Q05sLW9kVVJRN0duUkt6a1JJV3JUOTJlUTNVaEUydUV4Z1hDSWI5TkI2VmxmQ0xRbEtXQlZHR0NsZHB0bG5jZmd6TG9SWS1udDIwN1ptN01UdWhRbjBTNkt6YllCN29MYkNSUU12T29uLWRJQWpGTWNla3Rpb0lyeWVLb1Mwa195Y2ZWcVFia0dvdW1paFAzVFc0anlVa1BpVEc1VXdHNXFiWVI2M09YWHJRUU9CM2RsZ0p2Q1JrSzVqVFVIMXlKT3VoUTVrLThwQk0zNlR0Y0lZVkd2SjlzVEU2R0h3Qm9VWGJ6MzE1YmNMdVYxclp5akdWWm5QUG1nUDJKOW9TTFZ1N01YNUFuWVdsb1MwbkxLVUllX3JmRXhPVjVPZC11MXB4dDkzVWliWWRxcG16Sl9NSng4QW1jX3c2U1NxWFhOMm9TelJyQ0JsalQzaHZWOVB0eXZpdlhXQlZUZERianE4a1RkN29Vc05NMjNQQXNydU55S3VBek81U1FELUV5X2NrLTBpMD8+PC9nPjwvc3ZnPg=='>
|
||
<p>In MySQL, <code>SERIALIZABLE</code> is the same as <code>SELECT ... FOR SHARE</code>, which means reads are not blocked, but writes are. This can lead to deadlocks, as shown in the sequence diagram above.</p>
|
||
<h2 id="SELECT-…-FOR-UPDATE"><a href="#SELECT-…-FOR-UPDATE" class="headerlink" title="SELECT … FOR UPDATE"></a>SELECT … FOR UPDATE</h2><p><code>SELECT ... FOR UPDATE</code> is a way to lock rows for writing, which prevents other transactions from reading or writing the same rows. This is useful when you want to prevent the Lost Update Problem, but do not want to use the <code>SERIALIZABLE</code> isolation level:</p>
|
||
<img src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGRhdGEtZGlhZ3JhbS10eXBlPSJTRVFVRU5DRSIgc3R5bGU9IndpZHRoOjEyMDdweDtoZWlnaHQ6NjM5cHg7YmFja2dyb3VuZDojRkZGRkZGOyIgd2lkdGg9IjEyMDdweCIgaGVpZ2h0PSI2MzlweCIgdmlld0JveD0iMCAwIDEyMDcgNjM5IiB6b29tQW5kUGFuPSJtYWduaWZ5IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyI+PD9wbGFudHVtbCAxLjIwMjYuOGJldGExPz48ZGVmcy8+PGcgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGxlbmd0aEFkanVzdD0ic3BhY2luZyI+PGc+PHRpdGxlPkFsaWNlPC90aXRsZT48cmVjdCB4PSIyMzQuNjg1IiB5PSI0MS4yOTciIHdpZHRoPSI4IiBoZWlnaHQ9IjU1Ni4wNTUiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMCIvPjxsaW5lIHgxPSIyMzguMTg1IiB5MT0iNDEuMjk3IiB4Mj0iMjM4LjE4NSIgeTI9IjU5Ny4zNTIiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1kYXNoYXJyYXk6NSw1OyIvPjwvZz48Zz48dGl0bGU+REI8L3RpdGxlPjxyZWN0IHg9IjU3NC42NzciIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iNTU2LjA1NSIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjU3OC4xNzciIHkxPSI0MS4yOTciIHgyPSI1NzguMTc3IiB5Mj0iNTk3LjM1MiIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxnPjx0aXRsZT5Cb2I8L3RpdGxlPjxyZWN0IHg9IjkxNC42NyIgeT0iNDEuMjk3IiB3aWR0aD0iOCIgaGVpZ2h0PSI1NTYuMDU1IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjAiLz48bGluZSB4MT0iOTE4LjE3IiB5MT0iNDEuMjk3IiB4Mj0iOTE4LjE3IiB5Mj0iNTk3LjM1MiIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxyZWN0IHg9IjIxNC4zNTEiIHk9IjEwIiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iMjIxLjM1MSIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIzMy42NjciPkFsaWNlPC90ZXh0PjxyZWN0IHg9IjU2MC45ODUiIHk9IjEwIiB3aWR0aD0iMzQuMzg1IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNTY3Ljk4NSIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyMC4zODUiPkRCPC90ZXh0PjxyZWN0IHg9Ijg5Ny42NDIiIHk9IjEwIiB3aWR0aD0iNDEuMDU3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iOTA0LjY0MiIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyNy4wNTciPkJvYjwvdGV4dD48cmVjdCB4PSIyMTQuMzUxIiB5PSI1OTcuMzUyIiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iMjIxLjM1MSIgeT0iNjE3LjM0NyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMzMuNjY3Ij5BbGljZTwvdGV4dD48cmVjdCB4PSI1NjAuOTg1IiB5PSI1OTcuMzUyIiB3aWR0aD0iMzQuMzg1IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNTY3Ljk4NSIgeT0iNjE3LjM0NyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjAuMzg1Ij5EQjwvdGV4dD48cmVjdCB4PSI4OTcuNjQyIiB5PSI1OTcuMzUyIiB3aWR0aD0iNDEuMDU3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iOTA0LjY0MiIgeT0iNjE3LjM0NyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjcuMDU3Ij5Cb2I8L3RleHQ+PHBvbHlnb24gcG9pbnRzPSI1NjYuMTc3LDgxLjU2Myw1NzYuMTc3LDg1LjU2Myw1NjYuMTc3LDg5LjU2Myw1NzAuMTc3LDg1LjU2MyIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iMjM4LjE4NSIgeTE9Ijg1LjU2MyIgeDI9IjU3Mi4xNzciIHkyPSI4NS41NjMiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSIyNDUuMTg1IiB5PSI2NS4zNjQiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPsKgPC90ZXh0Pjx0ZXh0IHg9IjI0NS4xODUiIHk9IjgwLjQ5NyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNDAuNzMzIj5iZWdpbjs8L3RleHQ+PHBvbHlnb24gcG9pbnRzPSI1ODkuMTc3LDExMC42OTUsNTc5LjE3NywxMTQuNjk1LDU4OS4xNzcsMTE4LjY5NSw1ODUuMTc3LDExNC42OTUiIGZpbGw9IiMxODE4MTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7Ii8+PGxpbmUgeDE9IjU4My4xNzciIHkxPSIxMTQuNjk1IiB4Mj0iOTE3LjE3IiB5Mj0iMTE0LjY5NSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjU5NS4xNzciIHk9IjEwOS42MjkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjY0LjczMyI+c2V0IGJlZ2luOzwvdGV4dD48cG9seWdvbiBwb2ludHM9IjU2Ni4xNzcsMTM5LjgyOCw1NzYuMTc3LDE0My44MjgsNTY2LjE3NywxNDcuODI4LDU3MC4xNzcsMTQzLjgyOCIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iMjM4LjE4NSIgeTE9IjE0My44MjgiIHgyPSI1NzIuMTc3IiB5Mj0iMTQzLjgyOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjI0NS4xODUiIHk9IjEzOC43NjIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjI4Ni41MjciPnNlbGVjdCAqIGZyb20gZW50cnkgd2hlcmUgaWQgPSAxIGZvciB1cGRhdGU7PC90ZXh0PjxwYXRoIGQ9Ik0xOTUuNDY0LDE1Ni44MjggTDE5NS40NjQsMjE1LjgyOCBMMjgwLjQ2NCwyMTUuODI4IEwyODAuNDY0LDE2Ni44MjggTDI3MC40NjQsMTU2LjgyOCBMMTk1LjQ2NCwxNTYuODI4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNMjcwLjQ2NCwxNTYuODI4IEwyNzAuNDY0LDE2Ni44MjggTDI4MC40NjQsMTY2LjgyOCBMMjcwLjQ2NCwxNTYuODI4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSIyMDEuNDY0IiB5PSIxNzMuODk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0NS4xMzIiPlJlc3VsdDo8L3RleHQ+PHRleHQgeD0iMjA1LjU5NiIgeT0iMTkxLjAyOCIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMTEuODY0Ij5pZDwvdGV4dD48dGV4dCB4PSIyMjYuMjY0IiB5PSIxOTEuMDI4IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIzNS41MDkiPnZhbHVlPC90ZXh0Pjx0ZXh0IHg9IjIwOS43MjkiIHk9IjIwNi4xNjEiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjE8L3RleHQ+PHRleHQgeD0iMjI2LjI2NCIgeT0iMjA2LjE2MSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMTYuNTQyIj4xMDwvdGV4dD48bGluZSB4MT0iMjAxLjQ2NCIgeTE9IjE3OC45NjEiIHgyPSIyNjUuOTA1IiB5Mj0iMTc4Ljk2MSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIwMS40NjQiIHkxPSIxOTQuMDk0IiB4Mj0iMjY1LjkwNSIgeTI9IjE5NC4wOTQiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyMDEuNDY0IiB5MT0iMjA5LjIyNyIgeDI9IjI2NS45MDUiIHkyPSIyMDkuMjI3IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMjAxLjQ2NCIgeTE9IjE3OC45NjEiIHgyPSIyMDEuNDY0IiB5Mj0iMjA5LjIyNyIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIyMi4xMzIiIHkxPSIxNzguOTYxIiB4Mj0iMjIyLjEzMiIgeTI9IjIwOS4yMjciIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyNjUuOTA1IiB5MT0iMTc4Ljk2MSIgeDI9IjI2NS45MDUiIHkyPSIyMDkuMjI3IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48cG9seWdvbiBwb2ludHM9IjU4OS4xNzcsMjM4LjM1OSw1NzkuMTc3LDI0Mi4zNTksNTg5LjE3NywyNDYuMzU5LDU4NS4xNzcsMjQyLjM1OSIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iNTgzLjE3NyIgeTE9IjI0Mi4zNTkiIHgyPSI5MTcuMTciIHkyPSIyNDIuMzU5IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iNTk1LjE3NyIgeT0iMjM3LjI5MyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMjg2LjUyNyI+c2VsZWN0ICogZnJvbSBlbnRyeSB3aGVyZSBpZCA9IDEgZm9yIHVwZGF0ZTs8L3RleHQ+PHBhdGggZD0iTTY0NS4wMiwyNTUuMzU5IEw2NDUuMDIsMjgwLjM1OSBMMTE5MS4wMiwyODAuMzU5IEwxMTkxLjAyLDI2NS4zNTkgTDExODEuMDIsMjU1LjM1OSBMNjQ1LjAyLDI1NS4zNTkiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjxwYXRoIGQ9Ik0xMTgxLjAyLDI1NS4zNTkgTDExODEuMDIsMjY1LjM1OSBMMTE5MS4wMiwyNjUuMzU5IEwxMTgxLjAyLDI1NS4zNTkiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjY1MS4wMiIgeT0iMjcyLjQyNiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNTI1LjMiPkJvYidzIHRyYW5zYWN0aW9uIGlzIGJsb2NrZWQgdW50aWwgQWxpY2UncyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suPC90ZXh0Pjxwb2x5Z29uIHBvaW50cz0iNTY2LjE3NywzMDIuNjI1LDU3Ni4xNzcsMzA2LjYyNSw1NjYuMTc3LDMxMC42MjUsNTcwLjE3NywzMDYuNjI1IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSIyMzguMTg1IiB5MT0iMzA2LjYyNSIgeDI9IjU3Mi4xNzciIHkyPSIzMDYuNjI1IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iMjQ1LjE4NSIgeT0iMzAxLjU1OSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMzE1Ljk5MyI+dXBkYXRlIGVudHJ5IHNldCB2YWx1ZSA9IHZhbHVlIC0gNSB3aGVyZSBpZCA9IDE7PC90ZXh0Pjxwb2x5Z29uIHBvaW50cz0iNTY2LjE3NywzMzEuNzU4LDU3Ni4xNzcsMzM1Ljc1OCw1NjYuMTc3LDMzOS43NTgsNTcwLjE3NywzMzUuNzU4IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSIyMzguMTg1IiB5MT0iMzM1Ljc1OCIgeDI9IjU3Mi4xNzciIHkyPSIzMzUuNzU4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iMjQ1LjE4NSIgeT0iMzMwLjY5MiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNTMuNTE3Ij5jb21taXQ7PC90ZXh0PjxwYXRoIGQ9Ik0xNSwzNDguNzU4IEwxNSw0NTIuNzU4IEw0NjEsNDUyLjc1OCBMNDYxLDM1OC43NTggTDQ1MSwzNDguNzU4IEwxNSwzNDguNzU4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNNDUxLDM0OC43NTggTDQ1MSwzNTguNzU4IEw0NjEsMzU4Ljc1OCBMNDUxLDM0OC43NTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjIxIiB5PSIzNjUuODI1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0NS4xMzIiPlJlc3VsdDo8L3RleHQ+PHRleHQgeD0iMjUuMTMyIiB5PSIzODIuOTU4IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjM4Mi45NTgiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iMjkuMjY1IiB5PSIzOTguMDkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjE8L3RleHQ+PHRleHQgeD0iNDUuOCIgeT0iMzk4LjA5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj41PC90ZXh0PjxsaW5lIHgxPSIyMSIgeTE9IjM3MC44OTEiIHgyPSI4NS40NDEiIHkyPSIzNzAuODkxIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMjEiIHkxPSIzODYuMDIzIiB4Mj0iODUuNDQxIiB5Mj0iMzg2LjAyMyIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIxIiB5MT0iNDAxLjE1NiIgeDI9Ijg1LjQ0MSIgeTI9IjQwMS4xNTYiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyMSIgeTE9IjM3MC44OTEiIHgyPSIyMSIgeTI9IjQwMS4xNTYiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI0MS42NjgiIHkxPSIzNzAuODkxIiB4Mj0iNDEuNjY4IiB5Mj0iNDAxLjE1NiIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9Ijg1LjQ0MSIgeTE9IjM3MC44OTEiIHgyPSI4NS40NDEiIHkyPSI0MDEuMTU2IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48dGV4dCB4PSIyMSIgeT0iNDE1LjIyMyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyI+wqA8L3RleHQ+PHRleHQgeD0iMjEiIHk9IjQzMC4zNTYiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjQyNS4zNjkiPkJvYidzIHRyYW5zYWN0aW9uIGlzIHVuYmxvY2tlZC4gSGUgZ2V0J3MgdGhlIHNhbWUgcmVzdWx0IGFzIEFsaWNlLjwvdGV4dD48dGV4dCB4PSIyMSIgeT0iNDQ1LjQ4OSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyI+wqA8L3RleHQ+PHBvbHlnb24gcG9pbnRzPSI1ODkuMTc3LDQ3NS42ODgsNTc5LjE3Nyw0NzkuNjg4LDU4OS4xNzcsNDgzLjY4OCw1ODUuMTc3LDQ3OS42ODgiIGZpbGw9IiMxODE4MTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7Ii8+PGxpbmUgeDE9IjU4My4xNzciIHkxPSI0NzkuNjg4IiB4Mj0iOTE3LjE3IiB5Mj0iNDc5LjY4OCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjU5NS4xNzciIHk9IjQ3NC42MjIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjMxNS45OTMiPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSB2YWx1ZSAtIDUgd2hlcmUgaWQgPSAxOzwvdGV4dD48cGF0aCBkPSJNODA5LjEzMiw0OTIuNjg4IEw4MDkuMTMyLDU4MS42ODggTDEwMjcuMTMyLDU4MS42ODggTDEwMjcuMTMyLDUwMi42ODggTDEwMTcuMTMyLDQ5Mi42ODggTDgwOS4xMzIsNDkyLjY4OCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiBmaWxsPSIjRkVGRkREIi8+PHBhdGggZD0iTTEwMTcuMTMyLDQ5Mi42ODggTDEwMTcuMTMyLDUwMi42ODggTDEwMjcuMTMyLDUwMi42ODggTDEwMTcuMTMyLDQ5Mi42ODgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjgxNS4xMzIiIHk9IjUwOS43NTQiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjE5Ny4wNzYiPkJvYidzIHRyYW5zYWN0aW9uIGlzIGNvbW1pdGVkPC90ZXh0Pjx0ZXh0IHg9IjgxNS4xMzIiIHk9IjUyNC44ODciIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPsKgPC90ZXh0Pjx0ZXh0IHg9IjgxNS4xMzIiIHk9IjU0MC4wMiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNDUuMTMyIj5SZXN1bHQ6PC90ZXh0Pjx0ZXh0IHg9IjgxOS4yNjQiIHk9IjU1Ny4xNTMiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjExLjg2NCI+aWQ8L3RleHQ+PHRleHQgeD0iODM5LjkzMiIgeT0iNTU3LjE1MyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMzUuNTA5Ij52YWx1ZTwvdGV4dD48dGV4dCB4PSI4MjMuMzk3IiB5PSI1NzIuMjg2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4xPC90ZXh0Pjx0ZXh0IHg9IjgzOS45MzIiIHk9IjU3Mi4yODYiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjA8L3RleHQ+PGxpbmUgeDE9IjgxNS4xMzIiIHkxPSI1NDUuMDg2IiB4Mj0iODc5LjU3MyIgeTI9IjU0NS4wODYiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI4MTUuMTMyIiB5MT0iNTYwLjIxOSIgeDI9Ijg3OS41NzMiIHkyPSI1NjAuMjE5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iODE1LjEzMiIgeTE9IjU3NS4zNTIiIHgyPSI4NzkuNTczIiB5Mj0iNTc1LjM1MiIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjgxNS4xMzIiIHkxPSI1NDUuMDg2IiB4Mj0iODE1LjEzMiIgeTI9IjU3NS4zNTIiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI4MzUuOCIgeTE9IjU0NS4wODYiIHgyPSI4MzUuOCIgeTI9IjU3NS4zNTIiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI4NzkuNTczIiB5MT0iNTQ1LjA4NiIgeDI9Ijg3OS41NzMiIHkyPSI1NzUuMzUyIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48P3BsYW50dW1sLXNyYyBkTDh6UXlDbTREdHJBenZNMkNHYUd2UU81MTh3VEV3U0hQT2xZT1dpNVVjS0tsMkZoc0l2Zkt1UklBajE3eVV4a19WVVFNa3E4aW1WeVJKMzZkbFJxNTdSTWtuU3luS0NuMVozc21hd2EyNzVjRTdXTkdVb3hEX25UWTlGcTJxc01FQldGRTloQXZiZzhRblpXaGtHbnIxNWw1MjhYalVZcC1XVTVzYVllS19GYkRYWmtLMVVsSTNSOGdVQUFxeF9RdnJnMkVKejhPMnpqNDRncml2MjFwSjZnSkVyWTlRckFIbl9XZkpoRWlzU09BYy1UeVFhTW9GTGtWaDZTc2ZJOEo1SXA1T01lUGxuZDZDcjhMdlZ2dlVFbF9XN1YzZ09SOWZ3YzBFM1l3bFl1SXQ5cU93WUFwbUpaaUdQU1k4NHNIN3lLMXFvYjd3TGszNkFsbWt5UW5uNUR4TllCZzZCd01WdjAwMDA/PjwvZz48L3N2Zz4='>
|
||
|
||
<h2 id="Optimistic-Locking"><a href="#Optimistic-Locking" class="headerlink" title="Optimistic Locking"></a>Optimistic Locking</h2><p>This approach involves adding a version column to the table, which is incremented every time a row is updated. When a transaction updates a row, it checks whether the version has changed since it was read. If the version has changed, the transaction will fail and the changes will not be applied. This approach is useful when conflicts are rare, as it avoids the overhead of locking and blocking transactions:</p>
|
||
<img src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGRhdGEtZGlhZ3JhbS10eXBlPSJTRVFVRU5DRSIgc3R5bGU9IndpZHRoOjE0MzRweDtoZWlnaHQ6NDIxcHg7YmFja2dyb3VuZDojRkZGRkZGOyIgd2lkdGg9IjE0MzRweCIgaGVpZ2h0PSI0MjFweCIgdmlld0JveD0iMCAwIDE0MzQgNDIxIiB6b29tQW5kUGFuPSJtYWduaWZ5IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyI+PD9wbGFudHVtbCAxLjIwMjYuOGJldGExPz48ZGVmcy8+PGcgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGxlbmd0aEFkanVzdD0ic3BhY2luZyI+PGc+PHRpdGxlPkFsaWNlPC90aXRsZT48cmVjdCB4PSI4Mi4xNiIgeT0iNDEuMjk3IiB3aWR0aD0iOCIgaGVpZ2h0PSIzMzcuNTk0IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjAiLz48bGluZSB4MT0iODUuNjYiIHkxPSI0MS4yOTciIHgyPSI4NS42NiIgeTI9IjM3OC44OTEiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1kYXNoYXJyYXk6NSw1OyIvPjwvZz48Zz48dGl0bGU+REI8L3RpdGxlPjxyZWN0IHg9IjYxMy4yMjMiIHk9IjQxLjI5NyIgd2lkdGg9IjgiIGhlaWdodD0iMzM3LjU5NCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIwIi8+PGxpbmUgeDE9IjYxNi43MjMiIHkxPSI0MS4yOTciIHgyPSI2MTYuNzIzIiB5Mj0iMzc4Ljg5MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxnPjx0aXRsZT5Cb2I8L3RpdGxlPjxyZWN0IHg9IjExNTIuNTU4IiB5PSI0MS4yOTciIHdpZHRoPSI4IiBoZWlnaHQ9IjMzNy41OTQiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMCIvPjxsaW5lIHgxPSIxMTU2LjA1OCIgeTE9IjQxLjI5NyIgeDI9IjExNTYuMDU4IiB5Mj0iMzc4Ljg5MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxyZWN0IHg9IjYxLjgyNiIgeT0iMTAiIHdpZHRoPSI0Ny42NjciIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSI2OC44MjYiIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMzMuNjY3Ij5BbGljZTwvdGV4dD48cmVjdCB4PSI1OTkuNTMxIiB5PSIxMCIgd2lkdGg9IjM0LjM4NSIgaGVpZ2h0PSIzMC4yOTciIGZpbGw9IiNFMkUyRjAiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgcng9IjIuNSIgcnk9IjIuNSIvPjx0ZXh0IHg9IjYwNi41MzEiIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjAuMzg1Ij5EQjwvdGV4dD48cmVjdCB4PSIxMTM1LjUzIiB5PSIxMCIgd2lkdGg9IjQxLjA1NyIgaGVpZ2h0PSIzMC4yOTciIGZpbGw9IiNFMkUyRjAiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgcng9IjIuNSIgcnk9IjIuNSIvPjx0ZXh0IHg9IjExNDIuNTMiIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjcuMDU3Ij5Cb2I8L3RleHQ+PHJlY3QgeD0iNjEuODI2IiB5PSIzNzguODkxIiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNjguODI2IiB5PSIzOTguODg2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIzMy42NjciPkFsaWNlPC90ZXh0PjxyZWN0IHg9IjU5OS41MzEiIHk9IjM3OC44OTEiIHdpZHRoPSIzNC4zODUiIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSI2MDYuNTMxIiB5PSIzOTguODg2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyMC4zODUiPkRCPC90ZXh0PjxyZWN0IHg9IjExMzUuNTMiIHk9IjM3OC44OTEiIHdpZHRoPSI0MS4wNTciIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSIxMTQyLjUzIiB5PSIzOTguODg2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyNy4wNTciPkJvYjwvdGV4dD48cG9seWdvbiBwb2ludHM9IjYwNC43MjMsNjYuNDMsNjE0LjcyMyw3MC40Myw2MDQuNzIzLDc0LjQzLDYwOC43MjMsNzAuNDMiIGZpbGw9IiMxODE4MTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7Ii8+PGxpbmUgeDE9Ijg1LjY2IiB5MT0iNzAuNDMiIHgyPSI2MTAuNzIzIiB5Mj0iNzAuNDMiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSI5Mi42NiIgeT0iNjUuMzY0IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIzMjIuMzQ3Ij5zZWxlY3QgKiBmcm9tIGVudHJ5IHdoZXJlIGlkID0gMSBhbmQgdmVyc2lvbiA9IDE7PC90ZXh0Pjxwb2x5Z29uIHBvaW50cz0iNjI3LjcyMyw5NS41NjMsNjE3LjcyMyw5OS41NjMsNjI3LjcyMywxMDMuNTYzLDYyMy43MjMsOTkuNTYzIiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI2MjEuNzIzIiB5MT0iOTkuNTYzIiB4Mj0iMTE1NS4wNTgiIHkyPSI5OS41NjMiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSI2MzMuNzIzIiB5PSI5NC40OTciIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjMyMi4zNDciPnNlbGVjdCAqIGZyb20gZW50cnkgd2hlcmUgaWQgPSAxIGFuZCB2ZXJzaW9uID0gMTs8L3RleHQ+PHBvbHlnb24gcG9pbnRzPSI2MDQuNzIzLDEyNC42OTUsNjE0LjcyMywxMjguNjk1LDYwNC43MjMsMTMyLjY5NSw2MDguNzIzLDEyOC42OTUiIGZpbGw9IiMxODE4MTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7Ii8+PGxpbmUgeDE9Ijg1LjY2IiB5MT0iMTI4LjY5NSIgeDI9IjYxMC43MjMiIHkyPSIxMjguNjk1IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iOTIuNjYiIHk9IjEyMy42MjkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjUwNy4wNjMiPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSB2YWx1ZSAtIDUsIHZlcnNpb24gPSAyIHdoZXJlIGlkID0gMSBhbmQgdmVyc2lvbiA9IDE7PC90ZXh0PjxwYXRoIGQ9Ik0xNSwxNDEuNjk1IEwxNSwyMDAuNjk1IEwxNTYsMjAwLjY5NSBMMTU2LDE1MS42OTUgTDE0NiwxNDEuNjk1IEwxNSwxNDEuNjk1IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNMTQ2LDE0MS42OTUgTDE0NiwxNTEuNjk1IEwxNTYsMTUxLjY5NSBMMTQ2LDE0MS42OTUiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjIxIiB5PSIxNTguNzYyIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0NS4xMzIiPlJlc3VsdDo8L3RleHQ+PHRleHQgeD0iMjUuMTMyIiB5PSIxNzUuODk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjE3NS44OTUiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iODkuNTc0IiB5PSIxNzUuODk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0Ny42MTQiPnZlcnNpb248L3RleHQ+PHRleHQgeD0iMjkuMjY1IiB5PSIxOTEuMDI4IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4xPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjE5MS4wMjgiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjU8L3RleHQ+PHRleHQgeD0iODkuNTc0IiB5PSIxOTEuMDI4IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4yPC90ZXh0PjxsaW5lIHgxPSIyMSIgeTE9IjE2My44MjgiIHgyPSIxNDEuMzIiIHkyPSIxNjMuODI4IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMjEiIHkxPSIxNzguOTYxIiB4Mj0iMTQxLjMyIiB5Mj0iMTc4Ljk2MSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIxIiB5MT0iMTk0LjA5NCIgeDI9IjE0MS4zMiIgeTI9IjE5NC4wOTQiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyMSIgeTE9IjE2My44MjgiIHgyPSIyMSIgeTI9IjE5NC4wOTQiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI0MS42NjgiIHkxPSIxNjMuODI4IiB4Mj0iNDEuNjY4IiB5Mj0iMTk0LjA5NCIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9Ijg1LjQ0MSIgeTE9IjE2My44MjgiIHgyPSI4NS40NDEiIHkyPSIxOTQuMDk0IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMTQxLjMyIiB5MT0iMTYzLjgyOCIgeDI9IjE0MS4zMiIgeTI9IjE5NC4wOTQiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxwb2x5Z29uIHBvaW50cz0iNjI3LjcyMywyMjMuMjI3LDYxNy43MjMsMjI3LjIyNyw2MjcuNzIzLDIzMS4yMjcsNjIzLjcyMywyMjcuMjI3IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI2MjEuNzIzIiB5MT0iMjI3LjIyNyIgeDI9IjExNTUuMDU4IiB5Mj0iMjI3LjIyNyIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjYzMy43MjMiIHk9IjIyMi4xNjEiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjUxNS4zMzQiPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSB2YWx1ZSAtIDEwLCB2ZXJzaW9uID0gMiB3aGVyZSBpZCA9IDEgYW5kIHZlcnNpb24gPSAxOzwvdGV4dD48cGF0aCBkPSJNODkzLjY4MywyNDAuMjI3IEw4OTMuNjgzLDI5OS4yMjcgTDE0MTcuNjgzLDI5OS4yMjcgTDE0MTcuNjgzLDI1MC4yMjcgTDE0MDcuNjgzLDI0MC4yMjcgTDg5My42ODMsMjQwLjIyNyIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiBmaWxsPSIjRkVGRkREIi8+PHBhdGggZD0iTTE0MDcuNjgzLDI0MC4yMjcgTDE0MDcuNjgzLDI1MC4yMjcgTDE0MTcuNjgzLDI1MC4yMjcgTDE0MDcuNjgzLDI0MC4yMjciIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9Ijg5OS42ODMiIHk9IjI1Ny4yOTMiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjUwMy43NSI+Qm9iJ3MgdHJhbnNhY3Rpb24gZG9lcyBub3QgYWZmZWN0ZWQgYW55dGhpbmcsIHNpbmNlIHRoZSB2ZXJzaW9uIGhhcyBjaGFuZ2VkOjwvdGV4dD48dGV4dCB4PSI5MDMuODE1IiB5PSIyNzQuNDI2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjkyNC40ODMiIHk9IjI3NC40MjYiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iOTY4LjI1NyIgeT0iMjc0LjQyNiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNDcuNjE0Ij52ZXJzaW9uPC90ZXh0Pjx0ZXh0IHg9IjkwNy45NDgiIHk9IjI4OS41NTkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjE8L3RleHQ+PHRleHQgeD0iOTI0LjQ4MyIgeT0iMjg5LjU1OSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyI+NTwvdGV4dD48dGV4dCB4PSI5NjguMjU3IiB5PSIyODkuNTU5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4yPC90ZXh0PjxsaW5lIHgxPSI4OTkuNjgzIiB5MT0iMjYyLjM1OSIgeDI9IjEwMjAuMDAzIiB5Mj0iMjYyLjM1OSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9Ijg5OS42ODMiIHkxPSIyNzcuNDkyIiB4Mj0iMTAyMC4wMDMiIHkyPSIyNzcuNDkyIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iODk5LjY4MyIgeTE9IjI5Mi42MjUiIHgyPSIxMDIwLjAwMyIgeTI9IjI5Mi42MjUiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI4OTkuNjgzIiB5MT0iMjYyLjM1OSIgeDI9Ijg5OS42ODMiIHkyPSIyOTIuNjI1IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iOTIwLjM1MSIgeTE9IjI2Mi4zNTkiIHgyPSI5MjAuMzUxIiB5Mj0iMjkyLjYyNSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9Ijk2NC4xMjQiIHkxPSIyNjIuMzU5IiB4Mj0iOTY0LjEyNCIgeTI9IjI5Mi42MjUiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIxMDIwLjAwMyIgeTE9IjI2Mi4zNTkiIHgyPSIxMDIwLjAwMyIgeTI9IjI5Mi42MjUiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxwb2x5Z29uIHBvaW50cz0iNjI3LjcyMywzMjEuNzU4LDYxNy43MjMsMzI1Ljc1OCw2MjcuNzIzLDMyOS43NTgsNjIzLjcyMywzMjUuNzU4IiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI2MjEuNzIzIiB5MT0iMzI1Ljc1OCIgeDI9IjExNTUuMDU4IiB5Mj0iMzI1Ljc1OCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjYzMy43MjMiIHk9IjMyMC42OTIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjE0Mi4zOTEiPnNlbGVjdCBST1dfQ09VTlQoKTs8L3RleHQ+PHBhdGggZD0iTTkyOC4zNDQsMzM4Ljc1OCBMOTI4LjM0NCwzNjMuNzU4IEwxMzgzLjM0NCwzNjMuNzU4IEwxMzgzLjM0NCwzNDguNzU4IEwxMzczLjM0NCwzMzguNzU4IEw5MjguMzQ0LDMzOC43NTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjxwYXRoIGQ9Ik0xMzczLjM0NCwzMzguNzU4IEwxMzczLjM0NCwzNDguNzU4IEwxMzgzLjM0NCwzNDguNzU4IEwxMzczLjM0NCwzMzguNzU4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSI5MzQuMzQ0IiB5PSIzNTUuODI1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSI0MzQuNDI3Ij5ST1dfQ09VTlQoKSByZXR1cm5zIDAsIHNpbmNlIHRoZSB1cGRhdGUgZGlkIG5vdCBhZmZlY3QgYW55IHJvd3MuPC90ZXh0Pjw/cGxhbnR1bWwtc3JjIGhMNUJJbUNuNEJ4ZEx0bXQ3eEpJMmhySzU1ZXpNb1lBSHVjUnNJUW05ZkI5alhKb3V2c3FveDg1ZVEzRThRLVB4cDZKSFVDZ21sVzFKcWxDbVRIR2JOMkRFZVBGYTR6blp2c2JJNzA2enZYMlV1Q2pITlIxYl9rVE1lUUZGdzNMdWFJLV9KOHdLT1RhSWpaZ2ZZS2ZGVXZacDRPM19FcXZTWC00QkNXUjNaOEFNMUV0SlBoQkFIVE94ZVhwM3lvN2JCMWJwNTBZWXltbmlZOUhBOXBnZkVrcGZnVUpOeGVNNVI0WndtS1pIVXJQTHdkS2NLMVNaNDNOakdvU1pCM2lhdEwtQ204eEJtRERiZGZNZ25jTHJOdjN2ZHlSeHh2eGxOZnhWcm96Rmh6U05sdFdWZjE1ZkRINnB2V0NSTlJaQ3l1Q01ZZUQ4T09UdF9KUXRtMDA/PjwvZz48L3N2Zz4='>
|
||
|
||
<p>As an alternative, you can use a <code>WHERE</code> clause with the old value, instead of a version column. This is useful when the table does not have a version column:</p>
|
||
<img src='data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIGRhdGEtZGlhZ3JhbS10eXBlPSJTRVFVRU5DRSIgc3R5bGU9IndpZHRoOjEyNzlweDtoZWlnaHQ6NTIwcHg7YmFja2dyb3VuZDojRkZGRkZGOyIgd2lkdGg9IjEyNzlweCIgaGVpZ2h0PSI1MjBweCIgdmlld0JveD0iMCAwIDEyNzkgNTIwIiB6b29tQW5kUGFuPSJtYWduaWZ5IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiBjb250ZW50U3R5bGVUeXBlPSJ0ZXh0L2NzcyI+PD9wbGFudHVtbCAxLjIwMjYuOGJldGExPz48ZGVmcy8+PGcgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGxlbmd0aEFkanVzdD0ic3BhY2luZyI+PGc+PHRpdGxlPkFsaWNlPC90aXRsZT48cmVjdCB4PSIxMjAuNzQ3IiB5PSI0MS4yOTciIHdpZHRoPSI4IiBoZWlnaHQ9IjQzNy4yNTgiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMCIvPjxsaW5lIHgxPSIxMjQuMjQ3IiB5MT0iNDEuMjk3IiB4Mj0iMTI0LjI0NyIgeTI9IjQ3OC41NTUiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1kYXNoYXJyYXk6NSw1OyIvPjwvZz48Zz48dGl0bGU+REI8L3RpdGxlPjxyZWN0IHg9IjU2NC42NyIgeT0iNDEuMjk3IiB3aWR0aD0iOCIgaGVpZ2h0PSI0MzcuMjU4IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjAiLz48bGluZSB4MT0iNTY4LjE3IiB5MT0iNDEuMjk3IiB4Mj0iNTY4LjE3IiB5Mj0iNDc4LjU1NSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxnPjx0aXRsZT5Cb2I8L3RpdGxlPjxyZWN0IHg9IjEwMTYuODY0IiB5PSI0MS4yOTciIHdpZHRoPSI4IiBoZWlnaHQ9IjQzNy4yNTgiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMCIvPjxsaW5lIHgxPSIxMDIwLjM2NCIgeTE9IjQxLjI5NyIgeDI9IjEwMjAuMzY0IiB5Mj0iNDc4LjU1NSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLWRhc2hhcnJheTo1LDU7Ii8+PC9nPjxyZWN0IHg9IjEwMC40MTQiIHk9IjEwIiB3aWR0aD0iNDcuNjY3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iMTA3LjQxNCIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIzMy42NjciPkFsaWNlPC90ZXh0PjxyZWN0IHg9IjU1MC45NzgiIHk9IjEwIiB3aWR0aD0iMzQuMzg1IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNTU3Ljk3OCIgeT0iMjkuOTk1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyMC4zODUiPkRCPC90ZXh0PjxyZWN0IHg9Ijk5OS44MzYiIHk9IjEwIiB3aWR0aD0iNDEuMDU3IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iMTAwNi44MzYiIHk9IjI5Ljk5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMjcuMDU3Ij5Cb2I8L3RleHQ+PHJlY3QgeD0iMTAwLjQxNCIgeT0iNDc4LjU1NSIgd2lkdGg9IjQ3LjY2NyIgaGVpZ2h0PSIzMC4yOTciIGZpbGw9IiNFMkUyRjAiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgcng9IjIuNSIgcnk9IjIuNSIvPjx0ZXh0IHg9IjEwNy40MTQiIHk9IjQ5OC41NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxNCIgdGV4dExlbmd0aD0iMzMuNjY3Ij5BbGljZTwvdGV4dD48cmVjdCB4PSI1NTAuOTc4IiB5PSI0NzguNTU1IiB3aWR0aD0iMzQuMzg1IiBoZWlnaHQ9IjMwLjI5NyIgZmlsbD0iI0UyRTJGMCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiByeD0iMi41IiByeT0iMi41Ii8+PHRleHQgeD0iNTU3Ljk3OCIgeT0iNDk4LjU1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyMC4zODUiPkRCPC90ZXh0PjxyZWN0IHg9Ijk5OS44MzYiIHk9IjQ3OC41NTUiIHdpZHRoPSI0MS4wNTciIGhlaWdodD0iMzAuMjk3IiBmaWxsPSIjRTJFMkYwIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIHJ4PSIyLjUiIHJ5PSIyLjUiLz48dGV4dCB4PSIxMDA2LjgzNiIgeT0iNDk4LjU1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjE0IiB0ZXh0TGVuZ3RoPSIyNy4wNTciPkJvYjwvdGV4dD48cG9seWdvbiBwb2ludHM9IjU1Ni4xNyw2Ni40Myw1NjYuMTcsNzAuNDMsNTU2LjE3LDc0LjQzLDU2MC4xNyw3MC40MyIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iMTI0LjI0NyIgeTE9IjcwLjQzIiB4Mj0iNTYyLjE3IiB5Mj0iNzAuNDMiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSIxMzEuMjQ3IiB5PSI2NS4zNjQiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjIxNC41ODMiPnNlbGVjdCAqIGZyb20gZW50cnkgd2hlcmUgaWQgPSAxOzwvdGV4dD48cG9seWdvbiBwb2ludHM9IjU3OS4xNyw5NS41NjMsNTY5LjE3LDk5LjU2Myw1NzkuMTcsMTAzLjU2Myw1NzUuMTcsOTkuNTYzIiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI1NzMuMTciIHkxPSI5OS41NjMiIHgyPSIxMDE5LjM2NCIgeTI9Ijk5LjU2MyIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxOyIvPjx0ZXh0IHg9IjU4NS4xNyIgeT0iOTQuNDk3IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIyMTQuNTgzIj5zZWxlY3QgKiBmcm9tIGVudHJ5IHdoZXJlIGlkID0gMTs8L3RleHQ+PHBhdGggZD0iTTkyNi43OTksMTEyLjU2MyBMOTI2Ljc5OSwxNzEuNTYzIEwxMTEzLjc5OSwxNzEuNTYzIEwxMTEzLjc5OSwxMjIuNTYzIEwxMTAzLjc5OSwxMTIuNTYzIEw5MjYuNzk5LDExMi41NjMiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjxwYXRoIGQ9Ik0xMTAzLjc5OSwxMTIuNTYzIEwxMTAzLjc5OSwxMjIuNTYzIEwxMTEzLjc5OSwxMjIuNTYzIEwxMTAzLjc5OSwxMTIuNTYzIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSI5MzIuNzk5IiB5PSIxMjkuNjI5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxNjYuMTMxIj5Cb3RoIHNlZSB0aGUgc2FtZSB2YWx1ZTo8L3RleHQ+PHRleHQgeD0iOTM2LjkzMSIgeT0iMTQ2Ljc2MiIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMTEuODY0Ij5pZDwvdGV4dD48dGV4dCB4PSI5NTcuNTk5IiB5PSIxNDYuNzYyIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIzNS41MDkiPnZhbHVlPC90ZXh0Pjx0ZXh0IHg9Ijk0MS4wNjMiIHk9IjE2MS44OTUiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjE8L3RleHQ+PHRleHQgeD0iOTU3LjU5OSIgeT0iMTYxLjg5NSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMTYuNTQyIj4xMDwvdGV4dD48bGluZSB4MT0iOTMyLjc5OSIgeTE9IjEzNC42OTUiIHgyPSI5OTcuMjQiIHkyPSIxMzQuNjk1IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iOTMyLjc5OSIgeTE9IjE0OS44MjgiIHgyPSI5OTcuMjQiIHkyPSIxNDkuODI4IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iOTMyLjc5OSIgeTE9IjE2NC45NjEiIHgyPSI5OTcuMjQiIHkyPSIxNjQuOTYxIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iOTMyLjc5OSIgeTE9IjEzNC42OTUiIHgyPSI5MzIuNzk5IiB5Mj0iMTY0Ljk2MSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9Ijk1My40NjciIHkxPSIxMzQuNjk1IiB4Mj0iOTUzLjQ2NyIgeTI9IjE2NC45NjEiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI5OTcuMjQiIHkxPSIxMzQuNjk1IiB4Mj0iOTk3LjI0IiB5Mj0iMTY0Ljk2MSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PHBvbHlnb24gcG9pbnRzPSI1NTYuMTcsMjA5LjIyNyw1NjYuMTcsMjEzLjIyNyw1NTYuMTcsMjE3LjIyNyw1NjAuMTcsMjEzLjIyNyIgZmlsbD0iIzE4MTgxOCIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDoxO3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2UtbWl0ZXJsaW1pdDoxMDsiLz48bGluZSB4MT0iMTI0LjI0NyIgeTE9IjIxMy4yMjciIHgyPSI1NjIuMTciIHkyPSIyMTMuMjI3IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iMTMxLjI0NyIgeT0iMTkzLjAyOCIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iNDE5LjkyMyI+dXBkYXRlIGVudHJ5IHNldCB2YWx1ZSA9IHZhbHVlIC0gNSB3aGVyZSBpZCA9IDEgYW5kIHZhbHVlID0gMTA7PC90ZXh0Pjx0ZXh0IHg9IjEzMS4yNDciIHk9IjIwOC4xNjEiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPsKgPC90ZXh0PjxwYXRoIGQ9Ik0xNSwyMjYuMjI3IEwxNSwyODUuMjI3IEwyMzMsMjg1LjIyNyBMMjMzLDIzNi4yMjcgTDIyMywyMjYuMjI3IEwxNSwyMjYuMjI3IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNMjIzLDIyNi4yMjcgTDIyMywyMzYuMjI3IEwyMzMsMjM2LjIyNyBMMjIzLDIyNi4yMjciIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9IjIxIiB5PSIyNDMuMjkzIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxOTcuNDk1Ij5BbGljZSdzIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZDo8L3RleHQ+PHRleHQgeD0iMjUuMTMyIiB5PSIyNjAuNDI2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxMS44NjQiPmlkPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjI2MC40MjYiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iMjkuMjY1IiB5PSIyNzUuNTU5IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj4xPC90ZXh0Pjx0ZXh0IHg9IjQ1LjgiIHk9IjI3NS41NTkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiPjU8L3RleHQ+PGxpbmUgeDE9IjIxIiB5MT0iMjQ4LjM1OSIgeDI9Ijg1LjQ0MSIgeTI9IjI0OC4zNTkiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSIyMSIgeTE9IjI2My40OTIiIHgyPSI4NS40NDEiIHkyPSIyNjMuNDkyIiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iMjEiIHkxPSIyNzguNjI1IiB4Mj0iODUuNDQxIiB5Mj0iMjc4LjYyNSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjIxIiB5MT0iMjQ4LjM1OSIgeDI9IjIxIiB5Mj0iMjc4LjYyNSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9IjQxLjY2OCIgeTE9IjI0OC4zNTkiIHgyPSI0MS42NjgiIHkyPSIyNzguNjI1IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iODUuNDQxIiB5MT0iMjQ4LjM1OSIgeDI9Ijg1LjQ0MSIgeTI9IjI3OC42MjUiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxwb2x5Z29uIHBvaW50cz0iNTc5LjE3LDMyMi44OTEsNTY5LjE3LDMyNi44OTEsNTc5LjE3LDMzMC44OTEsNTc1LjE3LDMyNi44OTEiIGZpbGw9IiMxODE4MTgiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7Ii8+PGxpbmUgeDE9IjU3My4xNyIgeTE9IjMyNi44OTEiIHgyPSIxMDE5LjM2NCIgeTI9IjMyNi44OTEiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MTsiLz48dGV4dCB4PSI1ODUuMTciIHk9IjMwNi42OTIiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjQyOC4xOTQiPnVwZGF0ZSBlbnRyeSBzZXQgdmFsdWUgPSB2YWx1ZSAtIDEwIHdoZXJlIGlkID0gMSBhbmQgdmFsdWUgPSAxMDs8L3RleHQ+PHRleHQgeD0iNTg1LjE3IiB5PSIzMjEuODI1IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj7CoDwvdGV4dD48cGF0aCBkPSJNNzc2Ljg5OSwzMzkuODkxIEw3NzYuODk5LDM5OC44OTEgTDEyNjIuODk5LDM5OC44OTEgTDEyNjIuODk5LDM0OS44OTEgTDEyNTIuODk5LDMzOS44OTEgTDc3Ni44OTksMzM5Ljg5MSIgc3R5bGU9InN0cm9rZTojMTgxODE4O3N0cm9rZS13aWR0aDowLjU7IiBmaWxsPSIjRkVGRkREIi8+PHBhdGggZD0iTTEyNTIuODk5LDMzOS44OTEgTDEyNTIuODk5LDM0OS44OTEgTDEyNjIuODk5LDM0OS44OTEgTDEyNTIuODk5LDMzOS44OTEiIHN0eWxlPSJzdHJva2U6IzE4MTgxODtzdHJva2Utd2lkdGg6MC41OyIgZmlsbD0iI0ZFRkZERCIvPjx0ZXh0IHg9Ijc4Mi44OTkiIHk9IjM1Ni45NTgiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjQ2NS45MzEiPkJvYidzIHRyYW5zYWN0aW9uIGRpZCBub3QgYWZmZWN0IGFueSByb3dzLCBzaW5jZSB0aGUgdmFsdWUgaGFzIGNoYW5nZWQ6PC90ZXh0Pjx0ZXh0IHg9Ijc4Ny4wMzEiIHk9IjM3NC4wOSIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyIgdGV4dExlbmd0aD0iMTEuODY0Ij5pZDwvdGV4dD48dGV4dCB4PSI4MDcuNjk5IiB5PSIzNzQuMDkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjM1LjUwOSI+dmFsdWU8L3RleHQ+PHRleHQgeD0iNzkxLjE2MyIgeT0iMzg5LjIyMyIgZmlsbD0iIzAwMCIgZm9udC1zaXplPSIxMyI+MTwvdGV4dD48dGV4dCB4PSI4MDcuNjk5IiB5PSIzODkuMjIzIiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIj41PC90ZXh0PjxsaW5lIHgxPSI3ODIuODk5IiB5MT0iMzYyLjAyMyIgeDI9Ijg0Ny4zNCIgeTI9IjM2Mi4wMjMiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI3ODIuODk5IiB5MT0iMzc3LjE1NiIgeDI9Ijg0Ny4zNCIgeTI9IjM3Ny4xNTYiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI3ODIuODk5IiB5MT0iMzkyLjI4OSIgeDI9Ijg0Ny4zNCIgeTI9IjM5Mi4yODkiIHN0eWxlPSJzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6MC41OyIvPjxsaW5lIHgxPSI3ODIuODk5IiB5MT0iMzYyLjAyMyIgeDI9Ijc4Mi44OTkiIHkyPSIzOTIuMjg5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48bGluZSB4MT0iODAzLjU2NyIgeTE9IjM2Mi4wMjMiIHgyPSI4MDMuNTY3IiB5Mj0iMzkyLjI4OSIgc3R5bGU9InN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjU7Ii8+PGxpbmUgeDE9Ijg0Ny4zNCIgeTE9IjM2Mi4wMjMiIHgyPSI4NDcuMzQiIHkyPSIzOTIuMjg5IiBzdHlsZT0ic3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuNTsiLz48cG9seWdvbiBwb2ludHM9IjU3OS4xNyw0MjEuNDIyLDU2OS4xNyw0MjUuNDIyLDU3OS4xNyw0MjkuNDIyLDU3NS4xNyw0MjUuNDIyIiBmaWxsPSIjMTgxODE4IiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjEwOyIvPjxsaW5lIHgxPSI1NzMuMTciIHkxPSI0MjUuNDIyIiB4Mj0iMTAxOS4zNjQiIHkyPSI0MjUuNDIyIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjE7Ii8+PHRleHQgeD0iNTg1LjE3IiB5PSI0MjAuMzU2IiBmaWxsPSIjMDAwIiBmb250LXNpemU9IjEzIiB0ZXh0TGVuZ3RoPSIxNDIuMzkxIj5zZWxlY3QgUk9XX0NPVU5UKCk7PC90ZXh0PjxwYXRoIGQ9Ik03OTIuNjUsNDM4LjQyMiBMNzkyLjY1LDQ2My40MjIgTDEyNDcuNjUsNDYzLjQyMiBMMTI0Ny42NSw0NDguNDIyIEwxMjM3LjY1LDQzOC40MjIgTDc5Mi42NSw0MzguNDIyIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48cGF0aCBkPSJNMTIzNy42NSw0MzguNDIyIEwxMjM3LjY1LDQ0OC40MjIgTDEyNDcuNjUsNDQ4LjQyMiBMMTIzNy42NSw0MzguNDIyIiBzdHlsZT0ic3Ryb2tlOiMxODE4MTg7c3Ryb2tlLXdpZHRoOjAuNTsiIGZpbGw9IiNGRUZGREQiLz48dGV4dCB4PSI3OTguNjUiIHk9IjQ1NS40ODkiIGZpbGw9IiMwMDAiIGZvbnQtc2l6ZT0iMTMiIHRleHRMZW5ndGg9IjQzNC40MjciPlJPV19DT1VOVCgpIHJldHVybnMgMCwgc2luY2UgdGhlIHVwZGF0ZSBkaWQgbm90IGFmZmVjdCBhbnkgcm93cy48L3RleHQ+PD9wbGFudHVtbC1zcmMgZFA5REltQ240OFJsLUhObHBJZ3N4MXZ3UVFkR3JSQzVLUm04YVlRcDloMUQ5Q2NzNUZSN2N5c2trWXNMZ1pkYVMtUVRQc1FvaEJHV1o2em1MczA2Sm5NOVcya0twY3YwOWhXelRlZVNHS2lpYUN6UE9UVF9pNlI2MWVCVGFhRHFQOFlaaTQ1NUpxOUcxQ3l0WDJzbFFmZ2Jud1JyUkJlUkRGcUx5WlpiTUplbUNYQWpBNkZCMF9Cd05WOE9nZUZtNTdnREhSLUVDSnIwMHV5d2RvUHZEZHluR3pPYWRRQWR0T0w3U0RudUJlQXMxaHVNV2FZSUZDU3luSjdwaTdmZFlNRkFscVYtQmtfdzI1Vmc1MXN5QkRqa1NSRTdpcGpfM1EtRHdEaEdnSWhrOEhHdFJfXzgzQVMtbmlGZy1WTHN6TkpfRUJleXlISzZodDBLUWNTeWlZNUxOdzBWLTJUVm1KeTA/PjwvZz48L3N2Zz4='>
|
||
|
||
<h2 id="Roll-your-own-locking"><a href="#Roll-your-own-locking" class="headerlink" title="Roll your own locking"></a>Roll your own locking</h2><p>If locking via the database is not enough for your use case, you can implement your own locking mechanism, e.g. with Redis or Memcached. </p>
|
||
<h2 id="References"><a href="#References" class="headerlink" title="References"></a>References</h2><ul>
|
||
<li><a href="https://vladmihalcea.com/a-beginners-guide-to-database-locking-and-the-lost-update-phenomena/">A beginner’s guide to database locking and the lost update phenomena</a></li>
|
||
<li><a href="https://dev.mysql.com/doc/refman/8.4/en/innodb-transaction-isolation-levels.html">Isolation Levels in MySQL</a></li>
|
||
<li><a href="https://vladmihalcea.com/race-condition/">The race condition that led to Flexcoin bankruptcy</a></li>
|
||
</ul>
|
||
|
||
|
||
<div style="background: #f5f5f5; border: 1px solid #DDD; box-shadow: 3px 3px 0px rgba(0,0,0,0); padding: 10px">
|
||
<h3>Like what you read?</h3>
|
||
<p>You can <a href="https://cv.ruempler.eu/">hire me</a> or <a href="https://www.paypal.me/s0enke">make a donation via PayPal</a>!</p>
|
||
</div>
|
||
|
||
</div>
|
||
<footer class="article-footer">
|
||
<a data-url="https://ruempler.eu/2024/11/25/solutions-to-the-lost-update-problem/" data-id="cuidFAXBnUp3PUSKHNSuC1YOq" class="article-share-link">Share</a>
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
|
||
|
||
<nav id="article-nav">
|
||
|
||
<a href="/2025/06/27/enforcing-ports-and-adapters-in-php-with-deptrac/" id="article-nav-newer" class="article-nav-link-wrap">
|
||
<strong class="article-nav-caption">Newer</strong>
|
||
<div class="article-nav-title">
|
||
|
||
From Big Ball of Mud to Modulith: Introducing and keeping a clean architecture in PHP with Deptrac
|
||
|
||
</div>
|
||
</a>
|
||
|
||
|
||
<a href="/2024/09/20/understanding-react-function-as-child-pattern/" id="article-nav-older" class="article-nav-link-wrap">
|
||
<strong class="article-nav-caption">Older</strong>
|
||
<div class="article-nav-title">Understanding the React Function as Children Pattern</div>
|
||
</a>
|
||
|
||
</nav>
|
||
|
||
|
||
</article>
|
||
|
||
</section>
|
||
|
||
<aside id="sidebar">
|
||
|
||
|
||
<div class="widget-wrap">
|
||
<h3 class="widget-title">Categories</h3>
|
||
<div class="widget">
|
||
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/til/">til</a></li></ul>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="widget-wrap">
|
||
<h3 class="widget-title">Archives</h3>
|
||
<div class="widget">
|
||
<ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2026/">2026</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2025/">2025</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2024/">2024</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2023/">2023</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/">2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2017/">2017</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2016/">2016</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2015/">2015</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2014/">2014</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2013/">2013</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2012/">2012</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2010/">2010</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2008/">2008</a></li></ul>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div class="widget-wrap">
|
||
<h3 class="widget-title">Recent Posts</h3>
|
||
<div class="widget">
|
||
<ul>
|
||
|
||
<li>
|
||
<a href="/2026/09/06/filter-kika-videos-by-age-with-targetaudiencecategory/">Filter KiKA videos by age with targetAudienceCategory</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="/2025/11/09/enforcing-ports-and-adapters-in-php-with-deptrac-part2/">From Big Ball of Mud to Modulith Part 2: Introducing Ports and Adapters architecture</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="/2025/06/27/enforcing-ports-and-adapters-in-php-with-deptrac/">From Big Ball of Mud to Modulith: Introducing and keeping a clean architecture in PHP with Deptrac</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="/2024/11/25/solutions-to-the-lost-update-problem/">Solutions to the Lost Update Problem</a>
|
||
</li>
|
||
|
||
<li>
|
||
<a href="/2024/09/20/understanding-react-function-as-child-pattern/">Understanding the React Function as Children Pattern</a>
|
||
</li>
|
||
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</aside>
|
||
|
||
</div>
|
||
<footer id="footer">
|
||
|
||
<div class="outer">
|
||
<div id="footer-info" class="inner">
|
||
© 2026 Soenke Ruempler |
|
||
<a rel="me" href="https://awscommunity.social/@s0enke">mastodon</a><br>
|
||
Powered by <a href="http://hexo.io/" target="_blank">Hexo</a><br>
|
||
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</div>
|
||
<nav id="mobile-nav">
|
||
|
||
<a href="/" class="mobile-nav-link">Home</a>
|
||
|
||
<a href="/categories/til" class="mobile-nav-link">TIL</a>
|
||
|
||
<a href="/contact" class="mobile-nav-link">Contact</a>
|
||
|
||
</nav>
|
||
|
||
|
||
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
|
||
|
||
|
||
|
||
|
||
<script src="/js/script.js"></script>
|
||
|
||
|
||
</div>
|
||
</body>
|
||
</html> |