Ve tlusté učebnici hledáš slovo „fotosyntéza“. Můžeš listovat stránku po stránce, nebo otevřít rejstřík vzadu: slova jsou seřazená abecedně a u každého je číslo stránky. Za pár vteřin jsi tam. Databáze má na totéž index.
Druhá věc: posíláš kamarádovi 500 Kč. Banka je musí odečíst z tvého účtu a připsat na jeho. Kdyby po odečtení vypadl proud, peníze by zmizely. Databáze proto obě změny spojí do transakce: buď proběhnou obě, nebo žádná.
prijmeni urychlí hledání podle příjmení.COMMIT a ROLLBACKCOMMIT transakci potvrdí a změny se trvale uloží. ROLLBACK ji zruší a vrátí data do stavu před jejím začátkem.Při chybě uprostřed převodu se zavolá ROLLBACK.CREATE INDEX idx_zaci_prijmeni ON zaci (prijmeni);Porovnej pruhy. Bez indexu se čte každý řádek. Seřazený index se prohledává podobně jako binární vyhledávání, takže stačí řádově desítky kroků.
| Index pomáhá | Index škodí |
|---|---|
WHERE s podmínkou na indexovaný sloupec | zpomalí INSERT, UPDATE, DELETE (index se musí aktualizovat) |
JOIN přes cizí klíč | zabírá místo na disku |
ORDER BY podle indexovaného sloupce | u malých tabulek nemá smysl |
Primární klíč a UNIQUE sloupce mají index automaticky. Indexy se proto přidávají hlavně na cizí klíče a sloupce, podle kterých se často hledá.
START TRANSACTION;UPDATE ucty SET zustatek = zustatek - 500 WHERE id = 1;UPDATE ucty SET zustatek = zustatek + 500 WHERE id = 2;COMMIT;Kdyby druhý UPDATE selhal, aplikace zavolá ROLLBACK a i první změna se vrátí. Když databáze spadne před COMMIT, při novém startu nedokončenou transakci zruší. (Začátek se v některých SŘBD píše BEGIN.)
pohlavi s hodnotami M a Ž v tabulce milionu osob?pohlavi = 'Ž' vybere zhruba polovinu tabulky a SŘBD ji stejně rychleji přečte celou. Index pomáhá u sloupců s mnoha různými hodnotami, kde podmínka vybere malou část řádků.ROLLBACK?START TRANSACTION se zruší. První účet bude mít zase původní zůstatek. Peníze nezmizí ani se nezdvojí.Každý index se musí aktualizovat při každém zápisu a zabírá místo. Příliš mnoho indexů zpomalí vkládání a změny.
COMMIT ji potvrdí, ROLLBACK zruší.Banka, e-shop i rezervační systém letenek zpracují tisíce operací za sekundu. Dva lidé si chtějí koupit poslední místo v letadle ve stejnou chvíli. Server spadne uprostřed objednávky. Přesto data musí zůstat v pořádku.
Relační databáze to zaručují čtyřmi vlastnostmi transakcí. Podle anglických počátečních písmen se jim říká ACID. Je to častá maturitní otázka.
START TRANSACTION (nebo BEGIN), končí COMMIT (potvrzení) nebo ROLLBACK (zrušení).Rezervace místa + zaplacení + vystavení letenky.| Písmeno | Vlastnost | Co znamená | Převod peněz |
|---|---|---|---|
| A | atomicita (Atomicity) | provede se všechno, nebo nic | nikdy jen odečtení bez připsání |
| C | konzistence (Consistency) | transakce převede databázi z konzistentního stavu do konzistentního | zůstatek nepůjde pod povolený limit |
| I | izolovanost (Isolation) | souběžné transakce se navzájem neovlivňují, jako by běžely po sobě | dva převody z jednoho účtu se nepřepíší |
| D | trvalost (Durability) | potvrzená transakce přežije i havárii | po COMMIT a výpadku proudu je převod uložený |
Otoč kartičky až poté, co si vlastnost zkusíš říct sám.
COMMIT, musí přežít havárii. SŘBD to zajišťuje transakčním logem.ROLLBACK) a druhá doběhne. Aplikace zrušenou transakci obvykle zopakuje.„Atomický“ tu znamená nedělitelný, ne „malý“. Transakce může mít libovolně mnoho příkazů.