Я использую .NET MySqlClient v6.6.4.0 против MySql Server v5.7.19
Show table Status
показывает, что все таблицы используют движок InnoDB
SHOW VARIABLES LIKE 'tx_isolation';
возвращает
tx_isolation REPEATABLE-READ
Моя проблема проста.
У меня есть один процесс, который выполняет каждую минуту
Open a database connection
Begin a Transaction (using default isolation mode of RepeatableRead)
Delete all rows from a table
Insert a bunch of rows - at least 50 or 60
Commit transaction
Close connection
У меня также есть несколько отдельных процессов, которые могут запрашивать эту таблицу в любое время.
Я ожидаю, что если таблица будет запрошена во время записи в область транзакции, считыватель заблокирует ее до завершения транзакции и вернет все 50 или 60 строк.
Вместо этого я обнаружил, что читатель не блокирует и получает все, что было написано до этого момента.
Какой уровень изоляции мне нужен, чтобы считыватели блокировались во время заполнения таблицы и получали полный набор данных?