MySQL не может выбрать строку, вставленную в другой сеанс

Мой вопрос в заголовке.

Я открываю сеанс 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;

1

Решение

Я обнаружил, что это связано с тем, что уровень изоляции установлен на «повторяемые чтения». «Повторяемые чтения» означает именно то, что говорится, каждое чтение в старом сеансе получит точно такие же строки.

Чтобы это исправить, я должен был установить для базы данных значение «read commit», выполнив следующие действия:

  1. Добавление следующих строк в /etc/my.cnf (Ubuntu) /etc/my.cnf.d/my.cnf (CentOS):

    [mysqld]
    binlog_format = row
    transaction-isolation = READ-COMMITTED
    
  2. Перезапуск MySQL (в Ubuntu):

    sudo service mysql restart
    

Это позволяет всем сеансам видеть привержен изменения от других сессий.

Я привык к базе данных Oracle (по умолчанию ‘read commit’), а MySQL отличается (по умолчанию ‘repeatable reads’).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]