Я использую базы данных SQLite с реализацией System.Data.Sqlite для .NET.SQLite Transactions и LastInsertRowID
Я вставляю записи в цикл в несколько таблиц (пример дается с двумя таблицами). Сначала я начинаю транзакцию, а затем вставляю одну запись в таблицу 1. Затем я принимаю connection.LastInsertRowID
и вставляю запись вместе с этим значением (как внешний ключ) в таблицу 2.
Я делаю это для всех своих записей, а затем фиксирую перевод.
Почему это работает и мешает работе? Как узнать значение LastInsertRowID
, если записи действительно не были введены из-за того, что транзакция еще не была выполнена? Нужно ли угадывать значение каждый раз с предыдущих шагов и тем самым снизить производительность?
Не могу подтвердить прямо сейчас, но я подозреваю, что он выберет следующий номер и просто отбросит номер (т. Е. Оставит отверстие в последовательности), если транзакция отменяется. –
Это плохо? Что делать, если записи удаляются в одной транзакции перед вставками? – Jens