INSERT IGNORE
実際にはキーの競合が発生しないため、機能しません。
これはプログレス キュー用です。S
1 つのアプリケーションの場合、ステータス(「開始済み」) を含む 2 つの行は必要ありません。ただし、他のアプリケーションでもできるはずです。特に、2 つの作業項目を同時に発生させたい場合は、できます。それがデータベースの制約ではない理由です。
したがって、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 ロジックに頼らずに、この非常に恐ろしいハッキングを回避できますか?