Мой вопрос в заголовке.
Я открываю сеанс MySQL в приложении, и это приложение вызывает скрипт, который создает другой сеанс. Я вставляю запись в этот новый сеанс, но когда я выбираю в предыдущем сеансе, я не вижу вставленную строку.
Ниже приведен запрос на вставку:
INSERT INTO VCS.project_files (track_nbr, path, filename)
VALUES ('$track_nbr', '$path', '$filename');
Ниже приводится выбор:
SELECT pf.project_file_id, pf.track_nbr, pf.filename, pf.path, pf.status
FROM VCS.project_files pf;
Я обнаружил, что это связано с тем, что уровень изоляции установлен на «повторяемые чтения». «Повторяемые чтения» означает именно то, что говорится, каждое чтение в старом сеансе получит точно такие же строки.
Чтобы это исправить, я должен был установить для базы данных значение «read commit», выполнив следующие действия:
Добавление следующих строк в /etc/my.cnf
(Ubuntu) /etc/my.cnf.d/my.cnf
(CentOS):
[mysqld]
binlog_format = row
transaction-isolation = READ-COMMITTED
Перезапуск MySQL (в Ubuntu):
sudo service mysql restart
Это позволяет всем сеансам видеть привержен изменения от других сессий.
Я привык к базе данных Oracle (по умолчанию ‘read commit’), а MySQL отличается (по умолчанию ‘repeatable reads’).
Других решений пока нет …