2008-12-18 4 views

Répondre

14

Oui.

À l'intérieur d'une transaction, votre application voit tout.

Aucune autre transaction, cependant, ne voit une partie de la modification.

Le but d'une transaction est de faire apparaître une séquence d'instructions comme étant une modification atomique de la base de données.

Si vous validez, toutes les instructions de la transaction sont finalisées et tout le monde peut voir les effets.

Si vous annulez, aucune instruction de la transaction n'est finalisée et aucune modification ne se produit dans la base de données.

Toutes les instructions ne peuvent pas faire partie d'une transaction, BTW. DDL (Create and Drop, par exemple) met fin à toute transaction précédente.

4

Oui, pendant ou après la transaction, vous pouvez utiliser la fonction last_insert_rowid().

La fonction last_insert_rowid() renvoie le ROWID de la dernière ligne insérée à partir de la connexion à la base de données qui a appelé la fonction.

En d'autres termes:

SQLite version 3.6.23 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 

sqlite> create table T (C); 
sqlite> insert into T values ('hello'); 
sqlite> select last_insert_rowid(); 
1 
sqlite> BEGIN; 
sqlite> insert into T values ('test 2'); 
sqlite> select last_insert_rowid(); 
2 
sqlite> select rowid,* from T; 
1|hello 
2|test 2 
sqlite> ROLLBACK; 
sqlite> select last_insert_rowid(); 
2 
sqlite> select rowid,* from T; 
1|hello 
sqlite> 
Questions connexes