मेरे पास एक सारणी है जिसमें एक यूआरएल और एक स्ट्रिंग है जो इसके पैरामीटर का प्रतिनिधित्व करती है। समस्या यह है कि मैं एक यूआरएल और पैरामीटरस्ट्रिंग को टेबल के लिए अनन्य बाधा बनना चाहता हूं - उर्फ नो प्रविष्टियों में एक ही यूआरएल और पैरामीटर स्ट्रिंग हो सकती है। पैरामीटर स्ट्रिंग मनमाने ढंग से लम्बाई हो सकती है (800bytes से अधिक या तो जो MySQL कुंजी के लिए अधिकतम लंबाई है, इसलिए मैं अनन्य (यूआरएल, पैराम्स) का उपयोग नहीं कर सकता क्योंकि यह एक त्रुटि फेंकता है ...)।MySQL ट्रिगर में INSERT ऑपरेशन को कैसे रोकें?
मैंने ऐसा करने के लिए ट्रिगर्स का उपयोग करने के बारे में सोचा, लेकिन अगर ट्रिगर पता लगाता है तो डुप्लिकेट एंट्री डालने के बारे में एक अपवाद फेंक सकता है या एक त्रुटि कैसे बढ़ा सकता है? मुझे कल्पना है कि मैं माईएसक्ल की तरह माइस्क्लएक्सप्शन फेंकना चाहता हूं जैसे डुप्लिकेट प्राथमिक कुंजी इत्यादि। इसलिए मैं इसे अपने सी # कोड में पकड़ सकता हूं।
मेरे पास ट्रिगर में दो टुकड़े हैं जिनके लिए मुझे सहायता प्राप्त करने की आवश्यकता है: ... सी # को अपवाद फेंक दें ... मैं सी # को अपवाद कैसे फेंक सकता हूं? ... सम्मिलित करने की अनुमति दें ... - यदि कोई डुप्लिकेट प्रविष्टि नहीं है तो मैं केवल डालने की अनुमति कैसे दूं?
यहाँ ट्रिगर कोड:
CREATE TRIGGER urls_check_duplicates
BEFORE INSERT ON urls
FOR EACH ROW
BEGIN
DECLARE num_rows INTEGER;
SELECT COUNT(*)
INTO num_rows
FROM urls
WHERE url = NEW.url AND params = NEW.params;
IF num_rows > 0 THEN
... ABORT/throw exception to C# ...
ELSE
... Allow insert ...
END
MySQL 5.5 से, संभवतः पहले, आप संकेतों का उपयोग कर सकते हैं, [1] [1] [मेरा उत्तर यहाँ देख] इन-माइस्क्ल-ट्रिगर/718 9 3 9 6 # 718 9 3 9 – RuiDC