| | 129 | '''Што прави процедурата?''' |
| | 130 | |
| | 131 | Оваа stored procedure безбедно резервира седиште на лет, спречувајќи overbooking и двојна резервација на исто седиште. Користи row-level locking (FOR UPDATE) за да ја заштити "check-then-write" логиката, каде што прво се проверува капацитетот и бројот на резервации, па потоа се прави insert. Без транзакција, две паралелни сесии би можеле истовремено да ги поминат проверките и да го надминат капацитетот. \\ |
| | 132 | |
| | 133 | Процедурата: |
| | 134 | 1. Го заклучува летот и го чита капацитетот на авионот |
| | 135 | 2. Го брои бројот на постоечки резервации (со lock) |
| | 136 | 3. Проверува дали има слободно место |
| | 137 | 4. Прави insert на новата резервација |
| | 138 | 5. Прави commit или rollback при грешка |
| | 139 | |
| | 140 | Заклучувањето осигурува дека проверката на капацитетот и insert-от се случуваат атомично, спречувајќи race conditions. Ако седиштето е веќе зафатено, unique constraint ќе предизвика rollback, враќајќи ја базата во конзистентна состојба. |
| | 141 | |