2008-12-18 9 views

Respuesta

14

Sí.

Dentro de una transacción, su aplicación lo ve todo.

Sin embargo, ninguna otra transacción ve ninguna parte del cambio.

El objetivo de una transacción es hacer que una secuencia de declaraciones parezca ser un cambio atómico en la base de datos.

Si confirma, todas las declaraciones de la transacción se finalizan y todos los demás pueden ver los efectos.

Si realiza la reversión, no se finaliza ninguna declaración en la transacción y no se produce ningún cambio en la base de datos.

No todas las declaraciones pueden ser parte de una transacción, por cierto. DDL (Crear y soltar, por ejemplo) finalizará cualquier transacción anterior.

4

Sí, durante o después de la transacción, puede utilizar la función last_insert_rowid().

La función last_insert_rowid() devuelve el ROWID de la última fila insertada desde la conexión de la base de datos que invoca la función.

En otras palabras:

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> 
Cuestiones relacionadas