| 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''', базата гарантира дека тие податоци ќе бидат зачувани.\\ |