database - create - en sqlite3, ¿puede una selección tener éxito dentro de una transacción de inserción?
sqlite show database (2)
Comienzo una transacción, que consiste en insertar varios registros en una tabla. ¿Puedo seleccionar el último registro insertado fuera de la base de datos antes de comprometer la transacción?
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 se compromete, todas las declaraciones en 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.
Sí, durante o después de la transacción puede usar 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 invocó 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>