database = mysql language = php
Я программирую программу для работы
PC1 = компьютер1
шаг
1.PC1 вставить данные, новый идентификатор из Auto-increment.
2.PC1 выберите последний идентификатор
все работает нормально, но ..
Проблема, когда ваш код используется многими компьютерами в одном и том же миллионе. Например
2. Вставьте данные вставки вставки, Auto-increment new ID
3.PC1 выберите последний идентификатор <——- Неправильно
4PC2 выберите последний идентификатор
Как настроить базу данных или изменить php-код, чтобы предотвратить это, спасибо.
Вы должны использовать 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, потому что он действует на последний сделанный запрос.
Эти функции работают на основе каждого соединения , на него не влияют записи, вставленные другими клиентами.