Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица товаров (товарных строк).
id_goods (+PRIMARY,+AUTO_INCREMENT) | name_goods
После отправления из скрипта PHP запроса типа "INSERT INTO <...>", надо узнать ID, который был присвоен новой товарной строке.
Сам собой напрашивается вариант применить второй запрос, типа "SELECT MAX(id_goods) FROM..." .
Есть возможность составить запрос двойного действия?
Чтобы благодаря ему сначала в таблицу вносилась бы новая строка, а затем в скрипт PHP отправлялся бы ответ с присвоенным этой строке ID.
Неактивен
Insert ...;
SELECT LAST_INSERT_ID() AS ID;
Неактивен
klow написал:
Insert ...;
SELECT LAST_INSERT_ID() AS ID;
По-моему, это то же самое.
Предлагаю рассмотреть следующий вариант.
Этап 1. PHP-скрипт запускается.
Этап 2. Генерирует хэш (хэш-строкой) для новой строки, которую намеревается внести в таблицу базу данных (БД).
Этап 3. Блокирует всю базу данных на запись всеми остальными скриптами.
Этап 4. Вносит в таблицу БД новую запись вместе с хэшем.
Этап 5. Узнаёт, какой ID автоматически присвоен вновь внесённой строке.
Этап 6. Разблокирует БД на запись.
Неактивен
Vtornik написал:
По-моему, это то же самое.
Не совсем тоже самое, хотя в частном случае, может давать один и тот-же результат.
Vtornik написал:
Предлагаю рассмотреть следующий вариант...
Это смахивает на использование самолета для поездок на рынок. Конечно, можно, но ...
Неактивен
klow написал:
Vtornik написал:
Предлагаю рассмотреть следующий вариант...
Это смахивает на использование самолета для поездок на рынок. Конечно, можно, но ...
Если отказаться от блокировки, то получаются тоже два запроса: внести, узнать ID по хэшу.
Нагрузка та же, не больше. А вот точность явно выше.
Отредактированно Vtornik (12.06.2018 04:34:10)
Неактивен
Сначала создаёте запись, потом читаете полученный AI, другого не дано либо с помощью описанных выше костылей, которые вместо пользы больше приносят вреда.
LAST_INSERT_ID() точнее/лучше/надёжнее, чем MAX(), потому-что работает в пределах Вашей сессии. Т.е. если в параллельном потоке произошла вставка в эту же таблицу, то MAX() может вернуть неверный вариант, а LAST_INSERT_ID() именно тот, что нужно.
Неактивен