Вставка или запрос с 1 инструкцией

#mysql #sql #insert

Вопрос:

Использование MySQL

Со следующей таблицей:

 Idempotent
id VARCHAR(256) PRIMARY KEY
createdAt DATETIME NOT NULL
 

Как сделать INSERT или SELECT с 1 утверждением?

 INSERT INTO Idempotent
(id, createdAt)
VALUES
('hello world', '2021-09-23 12:34:56')
ON DUPLICATE KEY **SELECT * FROM Idempotent WHERE (id = 'hello world') **
 

SELECT не допускается ON DUPLICATE KEY , так как же сделать вставку или выбор с помощью 1 оператора? Это вообще возможно?

Комментарии:

1. UPDATE нужно следовать ON DUPLICATE KEY , а не SELECT .

2. Да, в этом-то и проблема. Есть ли способ попытаться INSERT и когда это не удастся, SELECT используя одно утверждение?

3. Ни за что. Запрос либо возвращает набор строк, либо нет, в то время как вы хотите, чтобы запрос возвращал набор строк только иногда. Пожалуйста, опишите саму задачу, а не (неправильный) способ, которым вы решили воспользоваться для решения этой задачи.

4. @theAnonymous . . . INSERT и SELECT это разные утверждения. Вы можете INSERT , а затем SELECT вставить строку, которая была вставлена.

Ответ №1:

Вам нужно использовать INSERT INTO .. SELECT FROM

 INSERT INTO Idempotent
(id, createdAt)
SELECT 'hello world', '2021-09-23 12:34:56'
FROM DUAL;
 

Комментарии:

1. Будет возвращено несколько запусков одного и того же оператора Duplicate entry 'hello world' for key 'idempotent.PRIMARY' .