Я думаю, вы немного усложняете это.Было бы лучше просто попытаться вставить, а затем поймать ошибку и сообщить о ней должным образом.В противном случае вы выполняете ненужные операции с вашей базой данных, один раз для первой проверки, а затем снова для вставки.В зависимости от трафика вашего приложения вы все равно можете столкнуться с состоянием гонки, когда вы заранее проверили другой запрос, вызвавший столкновение.