INSERT IGNORE
不起作用,因爲實際上不存在關鍵衝突。如果相關行不存在,則插入
這是一個進度隊列。對於一個應用程序,我不希望兩行的狀態爲S
(對於「啓動」)。但是其他應用程序應該能夠 - 特別是如果我想強制兩個工作項目一次發生,我可以。所以這就是爲什麼它不是數據庫約束。
因此,在SQL中說「插入不存在的地方」有點棘手。這工作:
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
是一個完全不相關的表,我才知道是小,恰好永遠是空的。如果由於某種原因它是空的,則會失敗。
我可以在我的SQL程序中避免這種非常可怕的黑客而不訴諸存儲的程序或IF/THEN邏輯嗎?
[MySQL的條件插入]的可能重複(http://stackoverflow.com/questions/913841/mysql-conditional-insert) – pilcrow