MySQL कॉलम परिभाषा के DEFAULT
विकल्प में गणना किए गए कॉलम या अभिव्यक्तियों का समर्थन नहीं करता है।
आप ट्रिगर में ऐसा कर सकते हैं (MySQL 5.0 या अधिक) की आवश्यकता:
CREATE TRIGGER format_stage_name
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END
तुम भी एक ऐसी ही ट्रिगर BEFORE UPDATE
बनाना चाह सकते हैं।
, पूर्व नाम और उपनाम में NULL
से सावधान रहें, क्योंकि किसी अन्य तार के साथ एक NULL
की concat एक NULL
पैदा करता है। प्रत्येक कॉलम पर या समेकित स्ट्रिंग पर उपयुक्त के रूप में COALESCE()
का उपयोग करें।
संपादित करें: निम्न उदाहरण सेट stage_name
केवल अगर यह NULL
है। अन्यथा आप अपने INSERT
कथन में stage_name
निर्दिष्ट कर सकते हैं, और इसे संरक्षित किया जाएगा।
CREATE TRIGGER format_stage_name
BEFORE INSERT ON actors
FOR EACH ROW
BEGIN
IF (NEW.stage_name IS NULL) THEN
SET NEW.stage_name = CONCAT(NEW.forename, ' ', NEW.surname);
END IF;
END
स्रोत
2008-12-11 19:03:56
मैं उपयोग नहीं किया है MySQL, लेकिन यह हमेशा श्रेणीबद्ध मूल्य के साथ स्तंभ के ऊपर लिख देगा? यदि आप इसे डिफ़ॉल्ट के रूप में कार्य करना चाहते हैं तो आपको इसे ओवरराइड करने में सक्षम होना चाहिए, इसलिए मुझे लगता है कि आपको NEW.stage_name पर एक सहवास की आवश्यकता होगी। –
@ बिल-करविन मुझे 'NEW.aka = CONCAT (NEW.fname, '', NEW.lname) 'पर एक वाक्यविन्यास त्रुटि मिल रही है ... मेरा पूरा आदेश देखें [** यहां पेस्टबिन ** पर] (http : //pastebin.com/FiEUBgcu) ... कोई पॉइंटर्स ?? – mOrloff
@mOrloff, मैं 'SET' कीवर्ड भूल गया। मैंने इसे ठीक करने के लिए ऊपर दिए गए कोड को संपादित किया है। –