как предотвратить неправильный идентификатор

database = mysql language = php

Я программирую программу для работы

PC1 = компьютер1

шаг

1.PC1 вставить данные, новый идентификатор из Auto-increment.

2.PC1 выберите последний идентификатор

все работает нормально, но ..

Проблема, когда ваш код используется многими компьютерами в одном и том же миллионе. Например

  1. Данные PC1insert, Новый идентификатор Auto-increment

2. Вставьте данные вставки вставки, Auto-increment new ID

3.PC1 выберите последний идентификатор <——- Неправильно

4PC2 выберите последний идентификатор

Как настроить базу данных или изменить php-код, чтобы предотвратить это, спасибо.

Solutions Collecting From Web of "как предотвратить неправильный идентификатор"

Вы должны использовать mysql_insert_id (или эквивалентный вызов API, который вы используете), чтобы получить идентификатор последней вставленной строки.

Я предполагаю, что теперь вы это делаете:

SELECT MAX(id) FROM yourtable 

Это не сработает, если вы не используете транзакции. Но использование функции mysql_insert_id – лучший способ.


В предложении есть также осторожность и некоторые примечания, которые вы должны прочитать:

Внимание : mysql_insert_id () преобразует возвращаемый тип собственной функции API MySQL C mysql_insert_id () в тип long (с именем int в PHP). Если ваш столбец AUTO_INCREMENT имеет тип столбца BIGINT (64 бит), преобразование может привести к некорректному значению. Вместо этого в SQL-запросе используйте внутреннюю функцию MySQL SQL LAST_INSERT_ID ().

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

Примечание . Значение функции MySQL SQL LAST_INSERT_ID () всегда содержит последнее заданное значение AUTO_INCREMENT и не сбрасывается между запросами.

в mysql, если вы позвоните

SELECT LAST_INSERT_ID ();

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

MySQL вернет правильный последний вставленный идентификатор сразу после любого оператора INSERT на клиентское (компьютерное) соединение, поэтому вам не придется беспокоиться об этом; сервер не будет их смешивать. Из документации :

Каждый клиент получит последний вставленный идентификатор для последнего оператора, который был выполнен клиентом.

Пока вы вызываете mysql_insert_id() в вашем PHP-коде, чтобы получить идентификатор вставки, не о чем беспокоиться.

Для этого у mySQL есть функция LAST_INSERT_ID() .

PHP-эквивалент (если вы используете классические функции mysql) – это mysql_insert_id() за исключением того, что эту функцию нужно вызывать сразу после запроса INSERT, потому что он действует на последний сделанный запрос.

Эти функции работают на основе каждого соединения , на него не влияют записи, вставленные другими клиентами.