ďťż
 
[sqlite] transakcje ďťż
 
[sqlite] transakcje
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[sqlite] transakcje



Bambero - 07-02-2006 10:13
[sqlite] transakcje
  Witam

Mam problem z korzstaniem z transakcji w sqlite.
Otóż w jednej transakcji tworzę sobie jedna tabele i wyzwalacze.
Dwa z nich tworzone sa do tabeli która nie istnieje wiec transakcja powinna zakonczyc sie bledem i ani tabela ani pozostale wyzwalacze nie powinny zostac utworzone.

Dzieje się jednak cos innego. Tabela i 2 'dobre' wyzwalacze się tworzą natomiast wyzwalacze z bledami sie nie tworzą - tak jakby transakcji wogóle nie było.

Poniżej jest zapytanie jakiego używam (baza jest pusta):
Zapytanie konczy się błędem: "no such table: test2", a tabela i dwa triggery zostaja mimo wszystko utworzone;

BEGIN TRANSACTION;
CREATE TABLE test1 (id integer NOT NULL PRIMARY KEY REFERENCES test2(id) ONUPDATE CASCADE ON DELETE CASCADE);
CREATE TRIGGER i_test1_id
BEFORE INSERT ON test1
FOR EACH ROW BEGIN
SELECT CASE
WHEN ((SELECT id FROM test2 WHERE id = NEW.id) IS NULL)
THEN RAISE(ABORT, 'insert on table "test1" violates foreign key constraint "i_test1_id"')
END;
END;
CREATE TRIGGER u_test1_id
BEFORE UPDATE ON test1
FOR EACH ROW BEGIN
SELECT CASE
WHEN ((SELECT id FROM test2 WHERE id = NEW.id) IS NULL)
THEN RAISE(ABORT, 'update on table "test1" violates foreign key constraint "u_test1_id"')
END;
END;
CREATE TRIGGER _d_test2_id
BEFORE DELETE ON test2
FOR EACH ROW BEGIN
DELETE FROM test1 WHERE id = OLD.id;
END;
CREATE TRIGGER _u_test2_id
BEFORE UPDATE ON test2
FOR EACH ROW BEGIN
UPDATE test1 SET id = NEW.id WHERE id = OLD.id;
END;
COMMIT TRANSACTION;

Pozdrawiam
Bambero





Piopio - 08-02-2006 17:23

  Bambero napisał(a):
> Witam
>
> Mam problem z korzstaniem z transakcji w sqlite.
> Otóż w jednej transakcji tworzę sobie jedna tabele i wyzwalacze.
> Dwa z nich tworzone sa do tabeli która nie istnieje wiec transakcja powinna zakonczyc sie bledem i ani tabela ani pozostale wyzwalacze nie powinny zostac utworzone.
>
> Dzieje się jednak cos innego. Tabela i 2 'dobre' wyzwalacze się tworzą natomiast wyzwalacze z bledami sie nie tworzą - tak jakby transakcji wogóle nie było.

Pewnie dlatego, że zmiany struktury bazy w SQLite wykonywane są poza
transakcjami - BEGIN TRANSACTION i COMMIT możesz wyrzucić.

Piotrek.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    =?iso-8859-2?q?=5BD=B3ugie=5D?= javax.transaction.SystemException z hibernate. PL/pgSQL jak =?ISO-8859-2?Q?u=BFy=E6_transakcji=2E?= [msssql, transact-sql] prosze o zapytanie ktore odzwierciedlistrukturę bazy [MS SQL 2000] Jak przeniesc Transaction Log na inny server. [MS SQL] System transakcyjny wybieranie kolejnych rekordow [SQLITE] kilka =?ISO-8859-2?Q?p=F3l_autoincrement_lub_sekw?==?ISO-8859-2?Q?encje?= [MS SQL]Log transakcji+restore+info (MYSQL) INSERT INTO (table) SELECT * i transakcje Mssql 2000 - replikacja transakcyjna + merge MS SQL 2005 Logi transakcji.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • wawa19wwa91.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com