>>469の要件は満たしてるのに、

>本来なら、別のデータを登録する処理なので、両立すべき。

なんでこういう条件を勝手に追加するんだか。

しかも、それぞれのトランザクション分離レベルで守らなければならないことと
実装に任されていることとの区別もついていないようだ。


>user2: select count(*) from t where a=4; -> データがないことを確認できる

ここでuser2をブロックあるいは失敗させてuser1を成功させてもSERIALIZABLEの
要件は満たすし、仮にここでブロックする実装なら

>user2: insert into t values(4, 400); -> エラー発生(Deadlock found)、user1のブロック解除

これをエラーにする必要もないんだが。