Транзакции MySQL - PullRequest
       5

Транзакции MySQL

0 голосов
/ 23 мая 2011

В настоящее время я создаю систему обмена сообщениями, и мне было интересно, стоит ли мне использовать транзакции (насколько я понимаю, их назначение).

В настоящее время у меня есть три таблицы:

разговоров : тема и т. Д. messages : сообщения (ограничение FK для таблицы разговоров) участников : идентификаторы пользователей в разговоре

Допустим, пользователь должен быть участником разговора, чтобы прочитать его.На странице я бы выполнил два запроса: один для данных разговора и один для сообщений.Я могу быть параноиком, но как я могу гарантировать, что участие пользователей (общее положение вещей) не меняется между этими двумя запросами?Будет ли транзакция ключом?Могу ли я столкнуться с какими-либо проблемами с производительностью?

(участие проверяется с помощью объединения по обоим запросам)

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 23 мая 2011

Если вы беспокоитесь, что человек может оставить разговор (через отдельный процесс или запрос) между вашими двумя запросами, тогда транзакция - это не то, что вам нужно. Что вы хотите сделать, это добавить объединение в таблицу «разговоров», чтобы отфильтровать людей, которых больше нет в беседе, что-то вроде этого:

select stuff
from messages m
join conversations c on (m.conversation = c.id and c.person = $current_user)
where ...

Где $current_user - рассматриваемый пользователь. Затем, если $current_user больше не находится в диалоге, никакие строки не выйдут из объединения и ничего не будет выбрано.

0 голосов
/ 01 июня 2011

Почему ты не предлагаешь что-то вроде Му? Просто добавь немного поворота ...

select m.*
from messages m
join conversations c on (m.conversation = c.id)
join participation p on (p.conversation = c.id) 
where p.person = $current_user
and...

Я что-то упустил? Транзакции обычно используются для обеспечения согласованности между записями операций записи, а не чтения.

0 голосов
/ 23 мая 2011

Транзакции, безусловно, должны помочь в вашей ситуации.Вам может понадобиться дополнительная помощь из-за ограничений базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...