2012-06-17 9 views
8

कमांड लाइन का उपयोग करके, किसी अन्य तालिका में विदेशी कुंजी सेट करने के लिए MySQL में मौजूदा तालिका को कैसे बदला जाए?कमांड लाइन का उपयोग कर एक MySQL तालिका की विदेशी कुंजी को कैसे बदलें

+0

मैंने Google का उपयोग करने की कोशिश की, और इसमें कुछ भी नहीं मिला जो इस सटीक मामले को कवर करता है। मैं इसे MySQL व्यवस्थापक में करना चाहता हूं, या विदेशी कुंजी के साथ तालिका बनाने के लिए, लेकिन मुझे यह निर्दिष्ट प्रश्न में नहीं पता है। –

+0

कृपया ध्यान दें कि आप Google में 'mysql 5.7 alter table' के साथ उत्पाद प्रलेखन पा सकते हैं। –

उत्तर

16

आपको मौजूदा foreign key छोड़ना होगा और दूसरा बनाना होगा। इस तरह उदाहरण के लिए:

ALTER TABLE my_table DROP FOREIGN KEY my_key; 
ALTER TABLE my_table ADD CONSTRAINT my_key FOREIGN KEY ('some_id') 
REFERENCES some_new_table ('some_other_id') ON UPDATE CASCADE ON DELETE CASCADE; 
+0

आपका कोड काम करता है, लेकिन मेरे पास एक संबंधित प्रश्न है। जब मैंने उन दो प्रश्नों को एक ही क्वेरी में गठबंधन करने का प्रयास किया, 'वैकल्पिक तालिका my_table ड्रॉप ..., जोड़ें ...' मुझे एक त्रुटि मिली, _errno: 121 "लिखने या अद्यतन पर डुप्लिकेट कुंजी" _। क्या मुझे कुछ याद आ रहा है, या क्या उन प्रश्नों को गठबंधन करना वास्तव में असंभव है? – iloo

2

mysql कमांड प्रॉम्प्ट पर help alter table निष्पादित और उत्पादन बहुत ज्यादा आत्म व्याख्यात्मक है।
add constraintforeign key खंड के साथ देखें और इसे अपनी तालिका पर लागू करें।

mysql> help alter table 
Name: 'ALTER TABLE' 
Description: 
Syntax: 
ALTER [IGNORE] TABLE tbl_name 
    alter_specification [, alter_specification] ... 

alter_specification: 
    ADD [COLUMN] column_definition [FIRST | AFTER col_name ] 
    | ADD [COLUMN] (column_definition,...) 
    | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...) 
    | ADD [CONSTRAINT [symbol]] 
     PRIMARY KEY [index_type] (index_col_name,...) 
    | ADD [CONSTRAINT [symbol]] 
     UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) 
    | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...) 
    | ADD [CONSTRAINT [symbol]] 
     FOREIGN KEY [index_name] (index_col_name,...) 
     [reference_definition] 
    | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} 
    | CHANGE [COLUMN] old_col_name column_definition 
     [FIRST|AFTER col_name] 
    | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] 
    | DROP [COLUMN] col_name 
    | DROP PRIMARY KEY 
    | DROP {INDEX|KEY} index_name 
    | DROP FOREIGN KEY fk_symbol 
    | DISABLE KEYS 
    | ENABLE KEYS 
    | RENAME [TO] new_tbl_name 
    | ORDER BY col_name 
    | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name] 
    | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name] 
    | DISCARD TABLESPACE 
    | IMPORT TABLESPACE 
    | table_option ... 
2

मैं द्वारा एक ही बात को प्राप्त कर सका:

ALTER TABLE the_table_name 
    ADD CONSTRAINT the_name_of_column_you_want_to_use_as_foreign_key 
     REFERENCES other_table_primary_id (Column_name) 
2

कई विदेशी कुंजी एक साथ श्रृंखलित आप है और आपको एक त्रुटि है कि errorno 15x साथ समाप्त होता है मिलता है इसका अर्थ है अन्य तालिकाओं देखते हैं कि जो उस विदेशी कुंजी पर निर्भर हैं जिसे आप छोड़ने की कोशिश कर रहे हैं।

जब आप उस त्रुटि को प्राप्त करते हैं तो विदेशी कुंजी को छोड़ने के लिए, आपको SET FOREIGN_KEY_CHECKS = 0; करना होगा और फिर आपको उन टेबलों पर विदेशी कुंजी छोड़नी होगी जिन पर कोई अन्य टेबल उन पर निर्भर नहीं है। फिर आप चेन में अगली टेबल पर विदेशी कुंजी को सफलतापूर्वक छोड़ सकते हैं और इसी तरह।

जब आप पूरा कर लें, तो सुनिश्चित करें कि आप SET FOREIGN_KEY_CHECKS = 1; फिर से चलाएं।

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