2010-11-21 12 views
8

मैं एक मेज के नीचे की तरह है:mysql में गणना की गई फ़ील्ड कैसे बनाएं?

:

create table info (username varchar(30),otherinfo varchar(100)); 

अब मैं नए क्षेत्र के लिए इस तालिका को बदलने के लिए चाहते हैं और इस क्षेत्र को डिफ़ॉल्ट मान होना आवश्यक है

md5(username) 

कुछ नीचे की तरह के रूप में

alter table info add NewField varchar(100) default md5(username); 

ऐसा कैसे करें?
आपकी मदद के लिए धन्यवाद

उत्तर

18

प्रति MySQL docs (जोर जोड़ा) यदि आप एक डिफ़ॉल्ट मान में एक अभिव्यक्ति नहीं कर सकते हैं:

10.1.4। डेटा प्रकार डिफ़ॉल्ट मान

डेटा प्रकार में डिफॉल्ट मान खंड कॉलम के लिए डिफ़ॉल्ट मान इंगित करता है। एक अपवाद के साथ, डिफ़ॉल्ट मान स्थिर होना चाहिए; यह एक फ़ंक्शन या अभिव्यक्ति नहीं हो सकता है। इसका मतलब है, उदाहरण के लिए, कि आप को दिनांक कॉलम के लिए डिफ़ॉल्ट रूप से फ़ंक्शन का मान जैसे कि अब() या CURRENT_DATE सेट नहीं कर सकते हैं। अपवाद यह है कि आप CURRENT_TIMESTAMP को को TIMESTAMP कॉलम के लिए डिफ़ॉल्ट निर्दिष्ट कर सकते हैं।

मैं परीक्षण किया है कि निम्नलिखित ट्रिगर अपने इरादे के लिए काम करता है:

CREATE TRIGGER MyTriggerName 
    BEFORE INSERT ON info 
    FOR EACH ROW 
    SET NEW.NewField = md5(NEW.username); 
6

आप इस कार्यक्षमता को प्राप्त करने के लिए एक उत्प्रेरक लिखना चाहिए, यह देखते हुए कि MySQL के एक md5 समारोह में बनाया गया है या आप के लिए सक्षम या तो लिख सकते हैं या MySQL :)

लें के लिए एक MD5 एल्गोरिदम लगता है कर रहे हैं md5 समारोह के लिए एक नज़र @http://dev.mysql.com/doc/refman/5.0/en/triggers.html

एक नज़र यहाँ

http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html

भी लेते हैं, आपको पता होना चाहिए MD5 है कि secure algorithm anymore नहीं।

+1

+1 उन सभी काम लिंक इकट्ठा करने के लिए। – bernie

संबंधित मुद्दे