تغيير جدول MySQL لإضافة تعليقات على الأعمدة

StackOverflow https://stackoverflow.com/questions/2162420

  •  23-09-2019
  •  | 
  •  

سؤال

لقد كنت أتحقق من وثائق MySQL لجدول Alter ويبدو أنه لا يتضمن طريقة لإضافة أو تعديل تعليق إلى عمود. كيف يمكنني أن أفعل هذا؟

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

-- for columns
-- ???
هل كانت مفيدة؟

المحلول

محاولة:

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

نصائح أخرى

يمكنك استخدام MODIFY COLUMN لفعل هذا. فقط افعل ...

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

أستعاض:

  • YourTable باسم طاولتك
  • your_column باسم تعليقك
  • your_previous_column_definition مع العمود 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 على العمود أو سوف تضيع.

البرنامج النصي لجميع الحقول على قاعدة البيانات:

SELECT 
table_name,
column_name,
CONCAT('ALTER TABLE `',
        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 = 'CURRENT_TIMESTAMP', 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. افتحه على محرر CSV المفضل لديك

ملاحظة: يمكنك التحسن إلى جدول واحد فقط إذا كنت تفضل

يعد الحل الذي قدمه @Rufinus رائعًا ، لكن إذا كان لديك زيادات تلقائية ، فسوف يكسره.

إجابة Rufinus مناسبة. أفضل استخدام التعديل بدلاً من استخدام التغيير إذا لم تكن بحاجة إلى تغيير اسم العمود.

أنا لا أتفق مع تعليق ماركوس بوب. مخطط قاعدة بيانات معلومات MySQL أو أي مكان يتواجد فيه مخطط المعلومات ويحتوي على تعريف البيانات لأي قاعدة بيانات ليس هو المكان المناسب لعلاج هذه الأشياء. يتم استخدام مخطط المعلومات من قبل SGBD لتسجيل التغييرات المطلوبة من قبل أي أمر DDL الذي تم تنفيذه ضد قاعدة البيانات. لماذا نحتاج إلى أوامر DDL؟

هناك نوعان من أوامر SQL لاستخدامها في أي قاعدة بيانات علائقية: DML و DDL. عند إضافة تعليق ، تحتاج إلى تغيير بنية الجدول.

من الوثائق MySQL 5.6:

"Information_schema هي قاعدة بيانات داخل كل مثيل MySQL ، المكان الذي يخزن معلومات حول جميع قواعد البيانات الأخرى التي يحتفظ بها خادم MySQL. تحتوي قاعدة بيانات information_schema على عدة جداول للقراءة فقط. إنها في الواقع طرق عرض ، وليس الجداول الأساسية ، لذلك لا توجد ملفات مرتبط بها ، ولا يمكنك ضبط المشغلات عليها. أيضًا ، لا يوجد دليل قاعدة بيانات بهذا الاسم.

على الرغم من أنه يمكنك تحديد معلومات _schema كقاعدة بيانات افتراضية مع عبارة استخدام ، إلا أنه يمكنك فقط قراءة محتويات الجداول ، وعدم تنفيذ عمليات الإدراج أو التحديث أو حذفها. "

الفصل 21 معلومات inform_schema

وفقًا للوثائق ، يمكنك إضافة تعليقات فقط في وقت إنشاء الجدول. لذلك يجب أن يكون تعريف الجدول. طريقة واحدة لأتمتة استخدام البرنامج النصي لقراءة التعريف وتحديث تعليقاتك.

المرجعي:

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top