Задать вопрос

Правильно ли использовать 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?
  • Вопрос задан
  • 205 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
DBA для вашего PostgreSQL?
insert_id будет неправильный

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

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

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

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