I need to modify all the content in a table. So I wrap the modifications
inside a transaction to ensure either all the operations succeed, or none
do. I start the modifications with a DELETE statement, followed by INSERTs.
What I've discovered is even if an INSERT fails, the DELETE has still takes
place, and the database is not rolled back to the pre-transaction state.
I've created an example to demonstrate this issue. Put the following
commands into a script called EXAMPLE.SQL
CREATE TABLE A(id INT PRIMARY KEY, val TEXT);
INSERT INTO A VALUES(1, "hello");
BEGIN;
DELETE FROM A;
INSERT INTO A VALUES(1, "goodbye");
INSERT INTO A VALUES(1, "world");
COMMIT;
SELECT * FROM A;
If you run the script: "sqlite3 a.db < EXAMPLE.SQL", you will see:
SQL error near line 10: column id is not unique
1|goodbye
What's surprising is that the SELECT statement results did not show
'1|hello'.
It would appear the DELETE was successful, and the first INSERT was
successful. But when the second INSERT failed (as it was intended to)..it
did not ROLLBACK the database.
Is this a sqlite error? Or an error in my understanding of what is supposed
to happen?
Thanks
Jim
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users