Rozpoczynam transakcję, która polega na wstawieniu kilku rekordów do tabeli. Czy mogę wybrać najnowszy wstawiony rekord z bazy danych przed zatwierdzeniem transakcji?w sqlite3, czy można wybrać opcję pomyślną w ramach transakcji wstawiania?
Odpowiedz
Tak.
Wewnątrz transakcji Twoja aplikacja widzi wszystko.
Żadna inna transakcja nie widzi żadnej części zmiany.
Punktem transakcji jest spowodowanie, że sekwencja instrukcji wydaje się być jedną atomową zmianą w bazie danych.
Po zatwierdzeniu wszystkie wyciągi transakcji zostaną sfinalizowane, a wszyscy inni zobaczą efekty.
W przypadku wycofania, instrukcja w transakcji nie jest sfinalizowana i nie następuje żadna zmiana w bazie danych.
Nie wszystkie wyciągi mogą być częścią transakcji, BTW. DDL (na przykład Create and Drop) zakończy poprzednią transakcję.
Tak, w trakcie lub po transakcji można użyć funkcji last_insert_rowid().
Funkcja last_insert_rowid() zwraca ROWID ostatniego wiersza wstawionego z połączenia z bazą danych, które wywołało funkcję.
Innymi słowy:
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>