आपको "ट्राई-एंड-कैच एक्सेप्शन" विधि को केवल इसलिए करना चाहिए क्योंकि आपको इसे वैसे भी करना है।
यदि आप पहले चेक करते हैं, तो आपके चेक और आपके इंसर्ट के बीच उस उपयोगकर्ता के लिए एक पंक्ति डालने से रोकने के लिए कुछ भी नहीं है, इस स्थिति में उपयोगकर्ता तालिका में होगा, भले ही आपका चेक उसे नहीं मिला।
किसी प्रकार के लेन-देन के भीतर चेक-एंड-इन्सर्ट चलाने में सक्षम होने की कमी (ताकि कोई और उस उपयोगकर्ता को अंतरिम में सम्मिलित न कर सके)। आप निश्चित नहीं हो सकते कि गैर-अपवाद काम करेगा।
और हालांकि कई DBMS' लेन-देन संबंधी सहायता प्रदान करते हैं, मुझे किसी . के बारे में पता नहीं है जो उस पंक्ति को लॉक कर देगा जिसे आपने अभी तक सम्मिलित नहीं किया है :-)
बेशक, यदि आपका एप्लिकेशन इस तरह से डिज़ाइन किया गया है कि केवल आपकी प्रक्रिया उपयोगकर्ताओं (और क्रमबद्ध) को सम्मिलित करेगी, तो आप चेक-फर्स्ट विधि का उपयोग कर सकते हैं। लेकिन मैं इस आशय की प्रचुर टिप्पणियां डालूंगा कि यदि आप कभी भी बड़े होते हैं तो इसे फिर से देखने की आवश्यकता होगी।