Databasernas grunder

vår 2026

Projektuppgift 3

I de följande testerna används en SQLite-tabell som har skapats på följande sätt:

CREATE TABLE Test (x INTEGER);
INSERT INTO Test (x) VALUES (1);

I testet visas kommandona som körs i två transaktioner i ordning. K1 är kommandot från användare 1 och K2 är kommandot från användare 2. Testa kommandona genom att öppna två SQLite-tolkar mot samma databasfil.

Din uppgift är att ange vilket svar SELECT-frågorna ger och om transaktionerna lyckas. En transaktion lyckas om alla kommandon i den genomförs (utan felmeddelandet Error: database is locked).

Test 1

K1: BEGIN;
K1: SELECT x FROM Test;

K2: BEGIN;
K2: UPDATE Test SET x = 2;
K2: SELECT x FROM Test;
K2: COMMIT;

K1: COMMIT;

Test 2

K1: BEGIN;
K1: SELECT x FROM Test;
K1: UPDATE Test SET x = 2;

K2: BEGIN;
K2: SELECT x FROM Test;
K2: COMMIT;

K1: COMMIT;

Test 3

K1: BEGIN;
K1: UPDATE Test SET x = 2;

K2: BEGIN;
K2: UPDATE Test SET x = 3;
K2: SELECT x FROM Test;
K2: COMMIT;

K1: SELECT x FROM Test;
K1: COMMIT;

Test 4

K1: BEGIN;
K1: UPDATE Test SET x = 2;

K2: BEGIN;
K2: UPDATE Test SET x = 2;
K2: SELECT x FROM Test;
K2: COMMIT;

K1: SELECT x FROM Test;
K1: COMMIT;

Test 5

K1: BEGIN;
K1: SELECT x FROM Test;

K2: BEGIN;
K2: SELECT x FROM Test;
K2: UPDATE Test SET x = 2;
K2: COMMIT;

K1: UPDATE Test SET x = 2;
K1: COMMIT;

Inlämning

Rapporten ska för varje test innehålla följande: