एकल MySQL स्टेटमेंट में कॉलम कैसे जोड़ें और इसे विदेशी कुंजी कैसे बनाएं?


83

Mysql में, क्या मैं एक ही कथन में एक कॉलम और विदेशी कुंजी जोड़ सकता हूं? और fk को जोड़ने के लिए उचित वाक्यविन्यास क्या है?

यहाँ मेरी एसक्यूएल है:

ALTER TABLE database.table
 ADD COLUMN columnname INT DEFAULT(1),
 FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

... और त्रुटि संदेश के साथ:

आपके SQL सिंटैक्स में कोई त्रुटि है; लाइन 4 पर 'FOREIGN KEY (fk_name) REFERENCES रीफ्टेबल (refcolumn) ON DELETE CASCADE' के पास उपयोग करने के लिए सही सिंटैक्स के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जाँच करें

जवाबों:


99

इसे इस्तेमाल करे:

ALTER TABLE database.table
  ADD COLUMN columnname INT DEFAULT(1),
  ADD FOREIGN KEY fk_name(fk_column) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

6
और के लिए fk_nameऔर fk_columnमैं whaat डालने के लिए है ...?
C4d

7
@ C4ud3x fk_nameएक ऐसा नाम होगा जिसे आप पहचान के उद्देश्य के लिए इस विशेष बाधा के रूप में देना चाहते हैं (क्वेरी में वैकल्पिक) mysql इसे अस्वस्थ करता है, और fk_columnसंदर्भित कॉलम आप विदेशी कुंजी के रूप में काम करना चाहते हैं।
राबिया नाज खान

1
मैं सभी को सलाह दूंगा कि वे स्पष्ट रूप से बाधा नाम निर्दिष्ट करें। यदि आप भविष्य में उस स्तंभ को हटाना चाहते हैं, तो खराब समस्याएं आपको मिल सकती हैं, और आपका सिस्टम पहले से ही अलग-अलग dbs में चलता है, जिनके पास विभिन्न विचारों के लिए है कि कैसे स्वचालित रूप से बाधाओं का नाम दिया जाए (उदाहरण के लिए mariaDB बनाम mySQL)। मैं कोड की इस एक पंक्ति को अलग करना चाहता था और यहाँ पर अवरोध की तरह निर्दिष्ट नहीं किया था। कुछ महीनों के बाद मैं एक माइग्रेशन लिखने की कोशिश करके कीमत चुकाता हूं जो सभी प्रणालियों में कॉलम को हटा देगा। stackoverflow.com/questions/55374835/…
अलकिस मविरिडिस

39

निम्न क्वेरी क्वेरी को बदलकर एक स्तंभ जोड़ता है और बाधा क्वेरी इसे एकल mysql क्वेरी में FK बनाता है। आप इसे इस तरह से कर सकते हैं,

वाक्य - विन्यास:

ALTER TABLE `SCHEMANAME`.`TABLE1` 
ADD COLUMN `FK_COLUMN` BIGINT(20) NOT NULL, 
ADD CONSTRAINT `FK_TABLE2_COLUMN` FOREIGN KEY (`FK_COLUMN`) 
REFERENCES `SCHEMANAME`.`TABLE2`(`PK_COLUMN`);

उदाहरण:

ALTER TABLE `USERDB`.`ADDRESS_TABLE` 
ADD COLUMN `USER_ID` BIGINT(20) NOT NULL AFTER `PHONE_NUMBER`, 
ADD CONSTRAINT `FK_CUSTOMER_TABLE_CUSTOMER_ID` FOREIGN KEY (`USER_ID`) 
REFERENCES `USERDB`.`CUSTOMER_TABLE`(`CUSTOMER_ID`); 

3

इसे थोड़ा सरल बनाया जा सकता है। आपको बस "FORDIGN KEY" से पहले "ADD" कीवर्ड जोड़ना होगा। नीचे उदाहरण जोड़ रहा हूं।

ALTER TABLE database.table
ADD COLUMN columnname INT DEFAULT(1),
ADD FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;

-3

आप इसका उपयोग कर सकते हैं।

ALTER TABLE database.table
ADD COLUMN columnname INT DEFAULT(1);
ALTER TABLE database.table add FOREIGN KEY (fk_name) REFERENCES reftable(refcolumn) ON DELETE CASCADE;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.