Предотвратить несвязанные данные MySQL - PullRequest
1 голос
/ 21 сентября 2019

Допустим, у меня есть 2 php-скрипта, которые запускаются с разных страниц (разных URL).Взгляните:

Сценарий 1:

<?php
// 15:43:00 - Connect to database.
// 15:43:00 - Mysql query: "SELECT user_data FROM users WHERE user_id = 5"
// 15:43:00 - sleep(5)
// 15:43:05 - Mysql query: "INSERT INTO another_table (table_user_data, table_user_id) VALUES ($user_data, 5)"

Сценарий 2:

<?php
// 15:43:03 - Connect to database.
// 15:43:03 - Mysql query: "DELETE FROM users WHERE user_id = 5"

Надеюсь, вы видели время.Итак, мой вопрос:

Сценарий 2 будет ожидать успешного выполнения сценария 1 или выполнить запрос и удалить пользователя?

Если он удалит пользователя, то как это сделать?Я вставляю строку в таблицу "another_table", так как синтаксис mysql INSERT не принимает предложение WHERE?

1 Ответ

2 голосов
/ 21 сентября 2019

Сценарий 2 не будет ждать завершения сценария 1.Это называется условием гонки в программировании.

Чтобы справиться с этим условием гонки в MySQL, вы можете добавить внешний ключ к another_table.table_user_id для ссылки users.user_id.В этом случае вставка в another_table завершится неудачно, если user_id не существует в таблице users в любой момент времени.

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