mysql: вставить запись, если не существует, вернуть идентификатор записи
мне нужно вставлять уникальные значения в таблицу и нуждаться в идентификаторах записей, нужно вставлять их в таблицу отношений, нужно, чтобы запрос вставлял запись, если не существует, возвращает идентификатор вставки, если существует, возвращает первичный ключ записи (id).
и я хочу сделать это для нескольких значений, таких как оранжевый, манго, банан, например, пакетная вставка.
схема:
------------
id | tag |
------------
1 | orange|
------------
я обманул это за одну запись
INSERT INTO 'tags' ('tag')
SELECT 'myvalue1'
FROM tags
WHERE NOT EXISTS (SELECT 1 FROM 'tags' WHERE 'tag'='myvalue1')
LIMIT 1
разместил вопрос, чтобы выяснить какое-то оптимизированное решение, я не хочу использовать дополнительные циклы в коде для соответствия значениям из db.
Ответы
Ответ 1
На странице документации для INSERT... ON DUPLICATE KEY UPDATE
есть пример INSERT... ON DUPLICATE KEY UPDATE
:
Ваш запрос будет выглядеть так:
INSERT INTO 'tags' ('tag') VALUES ('myvalue1')
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), 'tag'='myvalue1';
SELECT LAST_INSERT_ID();
Ответ 2
В приведенной ниже ссылке есть 4 метода, пожалуйста, посмотрите и используйте то, что вам подходит.
Метод 1: SELECT, затем INSERT. Метод 2: попробуйте {INSERT} catch {SELECT}. Метод 3: INSERT IGNORE, затем SELECT. Метод 4: INSERT INTO... ON DUPLICATE KEY UPDATE
http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/
Ответ 3
Вставить в таблицу MySQL или обновить, если существует
это решит вашу проблему? Я думаю, что это разрешит большинство ваших проблем, если вы переведете свой ответ в формат, который будет работать для вас.
Ответ 4
Вот состояние mysql для вставки, если оно не существует, и возвращает идентификатор либо новой вставкой, либо старой
INSERT INTO 'tags' ('tag')
SELECT 'myvalue1'
FROM tags
WHERE NOT EXISTS (SELECT id FROM 'tags' WHERE 'tag'='myvalue1')
LIMIT 1;
select * from brand where 'tag'='myvalue1'