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/

Ответ 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'