我有一个奇怪的问题,我们的网站有使用zend表单编码的注册表单,我在zend db insert操作之前检查了数据库是否存在用户名,它总是工作正常,对我们成千上万的用户也很好,但是,即使在10秒或20秒的时间内,只有少数(约100个)记录自动存储(猜测)重复记录,除了自动增量列之外,不可能再次使用不同的值提交表单。
答案 0 :(得分:3)
情况非常简单,称为“赛车”。
1. User1 submit form (email: x@x.com) 2. User2 submit form (email: x@x.com) 3. verify no x@x.com for User1 4. verify no x@x.com for User2 - before nither of them added there is no x@x.com in DB 5. Add to db User1 6. Add to db User2 - you have got an duplication error.
解决方案:
1. unique index to filed email 2. transaction (started from verification email exist up to insert a new record)