Of course, I read documentation and saw that
transaction is a supported feature. But I can't get to
work it. In order to make sure that we talk about the
same thing I understand transaction as atomic
operation. One or more data modification language
statements can be placed within transaction. Only two
legal results for transaction might have take place:
1) all statements executed successfully OR 2) none of
them successful. It can't be situation when some
statements are successful and some failed within the
same transaction.

I downloaded sqlite3 for Windows. My program
dynamically builds a file with sql statements like
this bellow:


BEGIN TRANSACTION;

-- This SQL statement fails because it's trying 
-- to insert a duplicate key.
INSERT INTO t(id) VALUES(10);

-- This SQL statement always successful despite on
fact
-- that first SQL statement failed
UPDATE t SET end_date=20 WHERE id=9;
 
END TRANSACTION;
COMMIT TRANSACTION;


Update statement always successful, even when INSERT
fails. So situation is such that some DML statements
are successful and some failed within the same
transaction. I could not belive that. I tried dozens
of times using syntax UPDATE OR ROLLBACK SET ..., but
I had no luck
I expect that UPDATE will never change a data on the
table if INSERT fails.

Please, explain me what am I doing wrong? I'm a
database person, but I could not figure out what to do
in such situation.
I need to get to work number of SQL statements in
transactional mode: all or nothing succeeds.

Is any way to check result of execution SQL statement?
Is it possible to select a system variable that would
give me status of the last SQL.

Thank you very much,
Vladimir

Reply via email to