php - Use a trigger to stop insert to a table not working MySQL -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 3 जवाब
हाय मैं
MySQL
ट्रिगरर्स , मैं MySQL 5.5.8 का उपयोग कर रहा हूं, मेरे पास टेबल है चूंकि इनपुट मान गलत है I को देने का प्रयास किया गया क्योंकि
MySQL अनुमति नहीं
चेक बाधा, मैंने एक इनपुट कोड की जांच करने के लिए
TRIGGER का उपयोग किया है एक संदेश और रोकें तालिका में अभिलेख डालें। लेकिन यह मेरे
TRIGGER को अनदेखा करता है, तालिका में दर्ज डालें यदि इसमें अमान्य डेटा है
तालिका
CREATE TABLE pupil_data (PupilID पूर्णांक (10) नहीं NULL AUTO_INCREMENT, PupilForeName varchar (255) नहीं NULL, PupilLastName varchar (255 ) नहीं NULL, लिंग CHAR (1), DateOfBirth दिनांक, PhoneNumber पूर्णांक (10), FamilyID पूर्णांक (10) नहीं NULL, प्राथमिक कुंजी (PupilID), विदेशी कुँजी (FamilyID) दें संदर्भ family_data (FamilyID) अद्यतन CASCADE पर हटा CASCADE पर, अद्वितीय (फोननंबर)) इंजन = इन्सोनेट;
ट्रिगर
परिसीमक $$ ट्रिगर बनाना `` check_pupil_before_insert` प्रत्येक पंक्ति के लिए pupil_data` पर डालने से पहले CHAR_LENGTH अगर शुरू ( NEW.DateOfBirth) & lt; 4 THEN SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT: = 'pupil_data पर जांच बाधा। डेटऑफ़बर्थ विफल' END यदि; END $ $ DELIMITER;
मैं यह जानना चाहता हूं कि DateOfBirth के लिए दिया गया मान 4 वर्णों से कम है, फिर रिकॉर्ड सम्मिलित नहीं करें, लेकिन त्रुटि संदेश दें।
दिनांकऑफ़बर्थ का मान
0 , तो मुझे लगता है कि यह एक त्रुटि देनी चाहिए, लेकिन जैसा कि आप देख सकते हैं कि इसे अनदेखा कर रहा है।
इसका कारण क्या है, मैं यह गलत कर रहा हूं, कृपया मदद, अग्रिम धन्यवाद ।
UPDATE
आपका ट्रिगर परिभाषा गलत है आप डेट डेटा प्रकार का उपयोग कर रहे हैं और इसके लिए आप चर की जांच कर रहे हैं जो शायद गलत है क्योंकि डिफ़ॉल्ट रूप से mysql दिनांक '0000-00-00' के रूप में प्रवेश करती है प्लस आपकी सिंटैक्स गलत है ...
तो आपका ट्रिगर परिभाषा होनी चाहिए
`प्रत्येक पंक्ति के लिए pupil_data` पर डालने से पहले बनाएं TRIGGER` check_pupil_before_insert` शुरू करते हैं NEW.DateOfBirth = '0000-00-00' तो सिग्नल SQLSTATE '12345' सेट MESSAGE_TEXT = 'बाधा जाँच pupil_data.DateOfBirth पर विफल'; अगर अंत; END $ $
इसे आज़माएं ..
Comments
Post a Comment