MySQL есть вероятность случайного смещения автоматического приращения

Если вставка в две таблицы MySQL одновременно, есть ли шанс, что другой пользователь может вставить одновременно, смещение таблиц?

Например гипотетически: (в php)

$conn = new mysqli($servername, $username, $password, $dbname);

$sql = "INSERT INTO Name (user_id, name, email)
VALUES (DEFAULT, 'User name', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$sql = "INSERT INTO Location (user_id, addressline1, addressline1, postcode)
VALUES (DEFAULT, '123 street', 'anytown, country', '123456')";

if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();

Если «Джон» управлял этим одновременно с «Бобом», возможно ли это для Джона? Name чтобы получить идентификатор автоинкремента 1 и его Location дать 2, потому что Боб Location был дан 1 первым, хотя его Name было дано 2.

Вроде сложно объяснить.

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

1

Решение

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

С помощью insert_id от mysqli решит эту проблему для вас. Именно по этой причине здесь хранится автоинкрементный идентификатор из последнего успешного запроса вставки. Измените ваш второй SQL-запрос на это.

$sql = "INSERT INTO Location (user_id, addressline1, addressline1, postcode)
VALUES ({$conn->insert_id}, '123 street', 'anytown, country', '123456')";

и это больше не проблема.

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector