2016-01-13 2 views
0

Я хотел был бы иметь возможность получить последний вставленный id в таблице mysql используя как раз mysql.Получить последний вставленный идентификатор, используя только MySQL

Пример:

INSERT INTO groups (name, customer_id) 
SELECT 
groups.name as name, 
'2' as customer_id 
FROM products 
LEFT JOIN groups ON products.group_id=groups.id 
WHERE customer_id=1; 

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

UPDATE products SET 
group_id=...last inserted id... 
WHERE customer_id=2; 

Возможно ли это, используя только mysql?

+0

Лучше обернуть все, что внутри транзакции –

+0

@ Ринго Можете ли вы объяснить, что немного больше. Мне нужно сделать много этих действий. Если есть способы облегчить это, я бы очень хотел их узнать. – Peter

+1

Я верю, что он пытается сказать «использовать START TRANSACTION» в начале ваших инструкций вставки/обновления и заканчивать 'COMMIT;' – PierreDuc

ответ

2

Использование LAST_INSERT_ID()

UPDATE products SET 
group_id = LAST_INSERT_ID() 
WHERE customer_id=2; 

Это должно работать ..

Вы должны использовать транзакцию, чтобы предотвратить INSERT если UPDATE пошло не так, и наоборот. Это помогает целостность данных

START TRANSACTION; 

INSERT INTO groups (name, customer_id) 
    SELECT 
    groups.name as name, 
    '2' as customer_id 
    FROM products 
    LEFT JOIN groups ON products.group_id=groups.id 
    WHERE customer_id=1; 

UPDATE products SET 
group_id = LAST_INSERT_ID() 
WHERE customer_id=2; 

COMMIT; 
+0

Спасибо! Как-то было трудно найти это. Все, что я получил, это методы, связанные с PHP, когда я его искал. – Peter

+0

@Strawberry Скорректированный мой ответ, спасибо – PierreDuc

Смежные вопросы