SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.06.2018 09:51:54

Vtornik
Участник
Зарегистрирован: 27.02.2018
Сообщений: 17

Получить ID, присвоенный внесённой товарной строке

Есть таблица товаров (товарных строк).
id_goods (+PRIMARY,+AUTO_INCREMENT) | name_goods

После отправления из скрипта PHP запроса типа "INSERT INTO <...>", надо узнать ID, который был присвоен новой товарной строке.
Сам собой напрашивается вариант применить второй запрос, типа "SELECT MAX(id_goods) FROM..." .
Есть возможность составить запрос двойного действия?
Чтобы благодаря ему сначала в таблицу вносилась бы новая строка, а затем в скрипт PHP отправлялся бы ответ с присвоенным этой строке ID.

Неактивен

 

#2 08.06.2018 10:03:24

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Получить ID, присвоенный внесённой товарной строке

Insert ...;
SELECT LAST_INSERT_ID() AS ID;

Неактивен

 

#3 10.06.2018 15:05:24

Vtornik
Участник
Зарегистрирован: 27.02.2018
Сообщений: 17

Re: Получить ID, присвоенный внесённой товарной строке

klow написал:

Insert ...;
SELECT LAST_INSERT_ID() AS ID;

По-моему, это то же самое.

Предлагаю рассмотреть следующий вариант.
Этап 1. PHP-скрипт запускается.
Этап 2. Генерирует хэш (хэш-строкой) для новой строки, которую намеревается внести в таблицу базу данных (БД).
Этап 3. Блокирует всю базу данных на запись всеми остальными скриптами.
Этап 4. Вносит в таблицу БД новую запись вместе с хэшем.
Этап 5. Узнаёт, какой ID автоматически присвоен вновь внесённой строке.
Этап 6. Разблокирует БД на запись.

Неактивен

 

#4 11.06.2018 06:41:40

klow
Старожил
Зарегистрирован: 06.12.2014
Сообщений: 411

Re: Получить ID, присвоенный внесённой товарной строке

Vtornik написал:

По-моему, это то же самое.

Не совсем тоже самое, хотя в частном случае, может давать один и тот-же результат.

Vtornik написал:

Предлагаю рассмотреть следующий вариант...

Это смахивает на использование самолета для поездок на рынок. Конечно, можно, но ...

Неактивен

 

#5 12.06.2018 04:31:09

Vtornik
Участник
Зарегистрирован: 27.02.2018
Сообщений: 17

Re: Получить ID, присвоенный внесённой товарной строке

klow написал:

Vtornik написал:

Предлагаю рассмотреть следующий вариант...

Это смахивает на использование самолета для поездок на рынок. Конечно, можно, но ...

Если отказаться от блокировки, то получаются тоже два запроса: внести, узнать ID по хэшу.
Нагрузка та же, не больше. А вот точность явно выше.

Отредактированно Vtornik (12.06.2018 04:34:10)

Неактивен

 

#6 18.06.2018 16:09:45

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Получить ID, присвоенный внесённой товарной строке

Сначала создаёте запись, потом читаете полученный AI, другого не дано либо с помощью описанных выше костылей, которые вместо пользы больше приносят вреда.

LAST_INSERT_ID() точнее/лучше/надёжнее, чем MAX(), потому-что работает в пределах Вашей сессии. Т.е. если в параллельном потоке произошла вставка в эту же таблицу, то MAX() может вернуть неверный вариант, а LAST_INSERT_ID() именно тот, что нужно.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson