この問題は、ファントム読み取り として知られています。 :
試してみてください
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
INSERT INTO mytable (myvalue, mykey) SELECT 'randomvalue', 1 WHERE
(SELECT COUNT(*) FROM mytable WHERE mykey = 1) < 5;
END;
トランザクション分離レベルは、カウントが5未満の場合にのみトランザクションが値を挿入することを保証します。