Wpis z mikrobloga

Mam prostą bazę danych SQLite:
CREATE TABLE ranking (
idkomputera VARCHAR(20) NOT NULL PRIMARY KEY,
wynik INTEGER NOT NULL
);
INSERT INTO ranking (id
komputera, wynik) VALUES ('AE0000A', 75);
INSERT INTO ranking (id_komputera, wynik) VALUES ('AE0000B', 80);

Otwieram dwa połączenia, w pierwszym połączeniu robię:
BEGIN;
SELECT * FROM ranking;
następnie w drugim:
BEGIN;
SELECT * FROM ranking;
następnie w pierwszym:
UPDATE ranking SET wynik = wynik + 10;
następnie w drugim:
UPDATE ranking SET wynik = wynik - 3;
i dostaję natychmiast odpowiedź "Error: database is locked", nawet gdy limit czasu w konfiguracji jest bardzo wysoki. Dlaczego tak się dzieje? Chciałbym, żeby drugi UPDATE się udał i żebym mógł wysłać COMMIT; w pierwszym połączeniu i później w drugim.

#programowanie
  • 3
@anonimowy_anonim:
Według tego co rozumiem, prawidłowym wynikiem byłoby coś takiego:

[1] BEGIN;
[1] SELECT * FROM ranking;
[2] BEGIN;
[2] SELECT * FROM ranking;
[1] UPDATE ranking SET wynik = wynik + 10;
teraz w pierwszej transakcji w wierszach są widoczne 85 i 90, chociaż na dysku jest dalej 75 i 80, bo nie było commita
[2] UPDATE ranking SET wynik = wynik - 3;
teraz w drugiej transakcji w wierszach