INSERT IGNORE
не работает, потому что на самом деле не будет ключевого конфликта.INSERT, если родственная строка не существует
Это для очереди выполнения. Для одного приложения мне не нужны две строки со статусом S
(для «запущено»). Однако другие приложения должны иметь возможность - в частности, если я хочу заставить сразу два рабочих элемента, я могу. Вот почему это не ограничение базы данных.
Так что немного сложно сказать в SQL "insert where where does not exist." Это работает:
insert into user_queue_google
(user_id, status, start_timestamp)
(select 221, 'S', NOW() FROM filter_type
WHERE 221 not in (select user_id from user_queue_google where status = 'S') limit 1);
Проблема заключается в том filter_type
совершенно не связаны таблицы, что я просто знаю мало и бывает, никогда не будет пустым. Если по какой-то причине он был пуст, это потерпит неудачу.
Могу ли я избежать этого ужасного взлома без использования хранимых программ или логики IF/THEN в моей программе SQL?
возможно дубликат [MySQL Условный Insert] (http://stackoverflow.com/questions/913841/mysql-conditional-insert) – pilcrow