以下に書いてみたんですけどね。
other/reservation_double_booking_check at master · kitoku-magic/other · GitHub
いや~これは、やっぱり予約レコードが「無い」時が厄介なのと、
あと、ダブルブッキングを「何処でチェックするか」というのが・・・
ダブルブッキングは、afterのトリガーでも仕込んでチェックというのも考えましたが、
でも、トリガー好きじゃない(昔、3日ぐらいハマった事が)しで、
こんな感じになりました。
ただ、これでもタイミングによっては、ダブルブッキングは防げても、
稀に正常に予約が追加されない事がある(リトライし続けても、ホントに同時にINSERT文が実行され続けると)と思われるという・・・
分離レベルをSERIALIZABLE(こちらはパフォーマンスに難)にしないと、きっちりは無理なんじゃないの?的な。
なので今後も、ちょくちょく「完璧形」を探っていきましょうか。
あと、参考URLは、覚えている範囲で(笑)
参考URL:
なかったらINSERTしたいし、あるならロック取りたいやん?
doc/innodb.md at master · ichirin2501/doc · GitHub
php - Insert query check if record exists - If not, Insert it - Stack Overflow
php - How to 'insert if not exists' in MySQL? - Stack Overflow