कॉलम पर टिप्पणी जोड़ने के लिए MySQL तालिका को बदल दें


109

मैं ALTER टेबल के लिए MySQL दस्तावेज़ीकरण की जाँच कर रहा हूँ और इसमें किसी कॉलम में टिप्पणी जोड़ने या संशोधित करने का तरीका शामिल नहीं लगता है। मैं यह कैसे कर सकता हूँ?

-- for table
ALTER TABLE myTable COMMENT 'Hello World'

-- for columns
-- ???

जवाबों:


134

प्रयत्न:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  

12
यह ठीक काम करने लगता है, लेकिन क्या स्तंभ की परिभाषा को शामिल किए बिना इसे करने का कोई अन्य तरीका है?
झॉनी डी। कैनो -लेफ्टवेयर-

15
यह समाधान ऑटो वेतन वृद्धि को तोड़ सकता है।
वर्कड्रीमर

13
ध्यान दें कि एक टिप्पणी में फेरबदल करने से तालिका का पूर्ण पुनर्निर्माण हो जाएगा। तो आप बहुत बड़ी मेज पर इसके बिना रहना चुन सकते हैं।
कोर्टनी माइल्स

2
@MarcusPope यह असंभव है। Dba.stackexchange.com/questions/78268/…
gaRex

5
@ user2045006 यह (या अब नहीं) सच है, जब तक कि स्तंभ की परिभाषा मौजूदा परिभाषा से बिल्कुल मेल खाती है। तालिका पुनर्निर्माण के बिना टिप्पणियाँ जोड़ी जा सकती हैं।
टॉर्बन

36

आप ऐसा करने के MODIFY COLUMNलिए उपयोग कर सकते हैं । बस करो...

ALTER TABLE YourTable
MODIFY COLUMN your_column
your_previous_column_definition COMMENT "Your new comment"

प्रतिस्थापन:

  • YourTable अपनी तालिका के नाम के साथ
  • your_column आपकी टिप्पणी के नाम के साथ
  • your_previous_column_definitionकॉलम के कॉलम_डेफिनिशन के साथ , जिसे मैं SHOW CREATE TABLE YourTableकिसी भी जाल से बचने के लिए एक कमांड के माध्यम से प्राप्त करने और शब्दशः की प्रतिलिपि बनाने की सलाह देता हूं । *
  • Your new comment कॉलम टिप्पणी के साथ आप चाहते हैं।

उदाहरण के लिए...

mysql> CREATE TABLE `Example` (
    ->   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    ->   `some_col` varchar(255) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> );
Query OK, 0 rows affected (0.18 sec)

mysql> ALTER TABLE Example
    -> MODIFY COLUMN `id`
    -> int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Look, I''m a comment!';
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE Example;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                  |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Example | CREATE TABLE `Example` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Look, I''m a comment!',
  `some_col` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

* जब भी आप किसी कथन का उपयोग MODIFYया CHANGEखंड ALTER TABLEकरते हैं, तो मेरा सुझाव है कि आप किसी SHOW CREATE TABLEकथन के आउटपुट से स्तंभ की परिभाषा की प्रतिलिपि बनाएँ । यह आपको गलती से अपने कॉलम की परिभाषा का एक महत्वपूर्ण हिस्सा खोने से बचाता है, यह एहसास न करके कि आपको इसे अपने MODIFYया CHANGEखंड में शामिल करने की आवश्यकता है । उदाहरण के लिए, यदि आप MODIFYएक AUTO_INCREMENTस्तंभ हैं, तो आपको क्लॉज AUTO_INCREMENTमें फिर से संशोधक को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है MODIFY, या स्तंभ एक AUTO_INCREMENTकॉलम के रूप में बंद हो जाएगा । इसी तरह, यदि स्तंभ को परिभाषित NOT NULLया DEFAULTमान दिया जाता है, तो इन विवरणों को कॉलम पर MODIFYया करते समय शामिल करने की आवश्यकता होती है CHANGEया वे खो जाएंगे।


14

डेटाबेस पर सभी क्षेत्रों के लिए स्क्रिप्ट:

SELECT 
table_name,
column_name,
CONCAT('ALTER TABLE `',
        TABLE_SCHEMA,
        '`.`',
        table_name,
        '` CHANGE `',
        column_name,
        '` `',
        column_name,
        '` ',
        column_type,
        ' ',
        IF(is_nullable = 'YES', '' , 'NOT NULL '),
        IF(column_default IS NOT NULL, concat('DEFAULT ', IF(column_default IN ('CURRENT_TIMESTAMP', 'CURRENT_TIMESTAMP()', 'NULL', 'b\'0\'', 'b\'1\''), column_default, CONCAT('\'',column_default,'\'') ), ' '), ''),
        IF(column_default IS NULL AND is_nullable = 'YES' AND column_key = '' AND column_type = 'timestamp','NULL ', ''),
        IF(column_default IS NULL AND is_nullable = 'YES' AND column_key = '','DEFAULT NULL ', ''),
        extra,
        ' COMMENT \'',
        column_comment,
        '\' ;') as script
FROM
    information_schema.columns
WHERE
    table_schema = 'my_database_name'
ORDER BY table_name , column_name
  1. सभी को एक CSV में निर्यात करें
  2. इसे अपने पसंदीदा सीएसवी संपादक पर खोलें

नोट: यदि आप चाहें तो आप केवल एक तालिका में सुधार कर सकते हैं

@ रुफिनस द्वारा दिया गया समाधान बहुत अच्छा है लेकिन अगर आपके पास ऑटो वेतन वृद्धि है तो इसे तोड़ देंगे।


3
एक नए उपयोगकर्ता के अनुसार टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं है, dump.aux_comment,होना चाहिए column_comment,। क्या आप जाँचेंगे कि क्या यह सच है?
नथादथ

गलती के लिये क्षमा करे।
वर्कड्रीमर

बेशक, यदि आपके पास एक आईडी auto_increment है, तो आपको करने की आवश्यकता है ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';। यह ऑटो वेतन वृद्धि को नहीं तोड़ता है।
म्पलेटो

@workdreamer I Rufinus समाधान का उल्लेख कर रहा था कि आप कहते हैं कि यह ऑटो वेतन वृद्धि को तोड़ सकता है। नहीं, दिया गया समाधान इसे तोड़ता नहीं है।
म्पलेटो

1
कमाल है बहुत बढ़िया!
रिजकी नूर हिदायत विजया

4

सूचना स्कीमा इन चीजों का इलाज करने का स्थान नहीं है (देखें DDL डेटाबेस कमांड)।

जब आप एक टिप्पणी जोड़ते हैं तो आपको तालिका संरचना (तालिका टिप्पणियाँ) को बदलने की आवश्यकता होती है।

MySQL 5.6 प्रलेखन से:

INFORMATION_SCHEMA प्रत्येक MySQL उदाहरण के भीतर एक डेटाबेस है, वह स्थान जो अन्य सभी डेटाबेस के बारे में जानकारी संग्रहीत करता है जो MySQL सर्वर रखता है। INFORMATION_SCHEMA डेटाबेस में कई रीड-ओनली टेबल हैं। वे वास्तव में दृश्य हैं, बेस टेबल नहीं हैं, इसलिए उनके साथ कोई फ़ाइल जुड़ी नहीं है, और आप उन पर ट्रिगर सेट नहीं कर सकते। इसके अलावा, उस नाम के साथ कोई डेटाबेस निर्देशिका नहीं है।

हालाँकि आप INFORMATION_SCHEMA का उपयोग किसी डिफ़ॉल्ट कथन के रूप में कर सकते हैं, आप केवल तालिकाओं की सामग्री पढ़ सकते हैं, INSERT, UPDATE, या उन पर DELETE संचालन नहीं कर सकते।

अध्याय 21 INFORMATION_SCHEMA तालिकाएँ


-3

प्रलेखन के अनुसार आप केवल सारणी बनाने के समय ही टिप्पणियाँ जोड़ सकते हैं। तो यह तालिका की परिभाषा होनी चाहिए। परिभाषा पढ़ने और अपनी टिप्पणियों को अपडेट करने के लिए स्क्रिप्ट का उपयोग करके इसे स्वचालित करने का एक तरीका।

संदर्भ:

http://cornempire.net/2010/04/15/add-comments-to-column-mysql/

http://bugs.mysql.com/bug.php?id=64439


2
यह उत्तर गलत है (तालिका निर्माण के बाद की टिप्पणियों को अपडेट करना संभव है, भले ही यह थकाऊ हो), और यह केवल अन्य वेबसाइटों से लिंक करता है, इसलिए यह स्टैक ओवरफ्लो उत्तर के संदर्भ में उपयोगी नहीं है।
लुकास ईडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.