Sobes.tech
Middle

Welke isolatieniveaus van transacties in databases ken je?

sobes.tech AI

Antwoord van AI

In de SQL-standaard worden vier niveaus van transactie-isolatie gedefinieerd: Read Uncommitted, Read Committed, Repeatable Read, Serializable.

  1. Read Uncommitted: Het laagste niveau. Een transactie kan gegevens lezen die nog niet zijn bevestigd (d.w.z. uitgevoerd door een andere transactie die nog niet is voltooid met COMMIT). Dit leidt tot "vuile" lezingen (dirty reads).

  2. Read Committed: De transactie ziet alleen gegevens die vóór of tijdens de uitvoering zijn bevestigd. Voorkomt "vuile" lezingen, maar staat niet herhaalbare lezingen (non-repeatable reads) en fantasieën (phantom reads) toe.

    • Non-repeatable reads: Dezelfde lezing binnen één transactie kan verschillende gegevens opleveren omdat een andere transactie ze heeft gewijzigd en bevestigd.
    • Fantasieën: Bij het uitvoeren van een query met een WHERE-voorwaarde, voegt een tweede transactie rijen toe of verwijdert ze die aan de voorwaarde voldoen, en dezelfde query binnen de eerste transactie geeft een andere set rijen terug.
  3. Repeatable Read: De transactie ziet alleen gegevens die vóór de start ervan zijn bevestigd. Garandeert dat herhaalde lezingen van dezelfde rijen binnen één transactie dezelfde gegevens opleveren. Voorkomt "vuile" en niet-herhaalbare lezingen. Staat fantasieën toe.

    // Voorbeeld van Repeatable Read
    // Transactie 1
    // BEGIN TRANSACTION;
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Bijvoorbeeld, 100
    
    // Transactie 2 (gelijktijdig)
    // BEGIN TRANSACTION;
    // INSERT INTO users (name, status) VALUES ('Nieuwe gebruiker', 'active');
    // COMMIT;
    
    // Transactie 1
    // SELECT COUNT(*) FROM users WHERE status = 'active'; // Nog steeds 100 (fantoom)
    // COMMIT;
    
  4. Serializable: De hoogste isolatieniveau. Garandeert dat gelijktijdige uitvoering van transacties equivalent is aan een sequentiële uitvoering. Voorkomt "vuile" lezingen, niet-herhaalbare lezingen en fantasieën. Kan de prestaties verminderen door blokkeringen.

In verschillende DBMS kunnen eigen implementaties en kenmerken van de isolatieniveaus bestaan, evenals extra niveaus. Bijvoorbeeld, in MySQL InnoDB is de standaard Repeatable Read.