Возможная проблема между DELETE и INSERT в MySQL с PHP?

Я не совсем уверен, что это возможно, поэтому хотел бы уточнить, если это так, и если да, то какой путь вперед (чтобы предотвратить или, если не возможно, смягчить).

У меня есть PHP-скрипт, который позволяет пользователю отправлять данные (который делает INSERT INTO) и другой PHP-скрипт (другой файл), который позволяет удалять указанные данные (который делает DELETE FROM), теперь давайте скажем, что я удаляю вещи, и там происходит быть кем-то, кто отправляет какие-то материалы одновременно — может ли это привести к тому, что данные будут упущены (оставаясь в этой таблице)?

Я искал и сталкивался с вещами, связанными с условиями гонки — не уверен, что это именно то, к чему относится вышеуказанная проблема?

Если это помогает поместить вышеупомянутое в контекст, пользователь имеет возможность отправлять ответы (сообщения) в тему (что делает INSERT INTO forum_posts WHERE topic_id =?), И у меня есть возможность удалить тему (которая, мы надеемся, должна удалить все прикрепленные сообщения) т.е. УДАЛИТЬ ИЗ forum_topics ГДЕ topic_id =? и затем DELETE FROM forum_posts WHERE topic_id =?, если при выполнении удаления пользователь каким-либо образом мог публиковать ответ на тему, это может вызвать проблемы (так как у нас есть сообщение, которое не имеет темы!).

Надеюсь, это имеет смысл.

0

Решение

Это именно то, для чего сделаны транзакции.
Например (псевдокод)

$db->beginTransaction();

// A set of queries; if one fails, an exception should be thrown
$db->query('first query');
$db->query('second query');
$db->query('third query');

// If we arrive here, it means that no exception was thrown
// i.e. no query has failed, and we can commit the transaction
$db->commit();

Когда вы делаете commit все 3 транзакции выполняются одновременно без задержки и не будут прерваны другим пользователем, удаляющим что-либо

0

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

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

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