[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.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?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.pldoc.pisz.plpdf.pisz.plwawa19wwa91.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 |
|