130 | | ова е уште еден пример каде се штити базата од внесување невалидни или несоодветни податоци. |
| 130 | ова е уште еден пример каде се штити базата од внесување невалидни или несоодветни податоци. \\ |
| 131 | = Isolation |
| 132 | За да оправдаме дека некоја трансакција се извршува како да е единствената во системот, притоа \\ |
| 133 | паралелните трансакции да не си влијаат меѓусебно додека се извршуваат, е единствен начин се гарантира точност на податоците.\\ |
| 134 | \\ |
| 135 | '''Пример 1 : FOR UPDATE '''\\ |
| 136 | Во '''/order''' функција, кога правам ажурирање на залиха '''stock''', користам '''FOR UPDATE''':\\ |
| 137 | {{{#!sql |
| 138 | const stocks = await client.query( |
| 139 | `SELECT s.id_stock, s.quantity |
| 140 | FROM stock s |
| 141 | JOIN sizes sz ON s.id_size = sz.id |
| 142 | WHERE s.id_product = $1 AND sz.size_label = $2 |
| 143 | ORDER BY s.created_at ASC |
| 144 | FOR UPDATE`, |
| 145 | [item.productId, item.size] |
| 146 | ); |
| 147 | }}} |
| 148 | '''FOR UPDATE''' го заклучува тој ред во базата за тековна трансакција,\\ |
| 149 | и тогаш други паралелни трансакции не можат да го менуваат редот додека оваа трансакција не заврши.\\ |
| 150 | На овој начин се спречува да има две нарачки кои истовремено ќе ги земат истите залихи,\\ |
| 151 | што би довело до неконсистентна состојба.\\ |
| 152 | = Durability |
| 153 | Една од целите на трансакции е трајност,што при нарачување би значело дека откако трансакцијата ќе биде потврдена,\\ |
| 154 | промените се трајно зачувани. Дури и при пад на системот, податоците остануваат зачувани.\\ |
| 155 | {{{#!sql |
| 156 | await client.query("COMMIT"); |
| 157 | }}} |
| 158 | Конкретно кај нас во база, овој ред гарантира дека сите промени во трансакцијата се трајно запишани во база.\\ |
| 159 | Дури и серверот ако падне веднаш по '''COMMIT''', базата гарантира дека тие податоци ќе бидат зачувани.\\ |