Правильно ли использовать LOCK TABLES READ для сохранения целостности данных в этом случае?

Создается тема и добавляется сообщение в тему. В качестве родителя у сообщения указывается номер только что созданной темы:
mysqli_query("LOCK TABLES `themes_table` READ;"); 

mysqli_query( "INSERT INTO `themes_table` ( ... ;" );

$new_theme_id = mysqli_insert_id();

mysqli_query( "INSERT INTO `posts_table` ( `parent_theme_id`=$new_theme_id, ... ;" );

mysqli_query("UNLOCK TABLES;");

Хочу избежать случая, когда до вставки сообщения другой процесс создает тему и insert_id будет неправильный. Правильно ли я понимаю, что после блокировки LOCK TABLES `themes_table` READ другой процесс не сможет записать новую тему в `themes_table` пока этот процесс не сделает UNLOCK TABLES?
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
insert_id будет неправильный

Невозможно. На любой интенсивность записи. Значение last insert id сессионное, а не глобальное.

Оберните в транзакцию - тогда до коммита никто и не увидит частично записанную транзакцию. Если говорить о транзакционных вещах, конечно, а не каких-нибудь myisam.
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Разве mysqli_insert_id(); возвратит не тот id, который был создан в текущем соединении? И тогда гипотетическое другое соединение никак на него не повлияет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы