Измените таблицу MySQL, чтобы добавить комментарии к столбцам

110

Я проверял документацию MySQL для ALTER TABLE, и, похоже, она не включает способ добавления или изменения комментария к столбцу. Как я могу это сделать?

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

-- for columns
-- ???
Джонни Д. Кано -Посуда-
источник

Ответы:

135

пытаться:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
Руфинус
источник
12
Кажется, все работает нормально, но есть ли другой способ сделать это без включения определения столбца?
Jhonny D. Cano - Leftware -
15
Это решение может нарушить автоматические приращения.
workdreamer
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с помощью столбца 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. Откройте его в своем любимом редакторе csv

Примечание: вы можете улучшить только одну таблицу, если хотите

Решение, данное @Rufinus, отличное, но если у вас есть автоматическое приращение, оно сломается.

мечтатель
источник
3
По словам нового пользователя, у которого недостаточно комментариев для комментариев, dump.aux_comment,должно быть column_comment,. Не могли бы вы проверить, правда ли это?
nhahtdh
Извините за ошибку.
workdreamer
Конечно, если у вас есть id auto_increment, вам нужно это сделать ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Это не нарушает автоматические приращения.
mpoletto
@workdreamer Я имел в виду решение Rufinus, которое, по вашему мнению, может нарушить автоматическое приращение. Нет, данное решение его не нарушает.
mpoletto
1
Потрясающе потрясающе!
Ризки Нур Хидаят Виджая
4

Информационная схема - не место для рассмотрения этих вещей (см. Команды базы данных DDL).

Когда вы добавляете комментарий, вам нужно изменить структуру таблицы (комментарии к таблице).

Из документации MySQL 5.6:

INFORMATION_SCHEMA - это база данных в каждом экземпляре MySQL, место, где хранится информация обо всех других базах данных, поддерживаемых сервером MySQL. База данных INFORMATION_SCHEMA содержит несколько таблиц, доступных только для чтения. На самом деле это представления, а не базовые таблицы, поэтому с ними не связаны файлы, и вы не можете устанавливать для них триггеры. Кроме того, нет каталога базы данных с таким именем.

Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью оператора USE, вы можете только читать содержимое таблиц, но не выполнять над ними операции INSERT, UPDATE или DELETE.

Глава 21 Таблицы INFORMATION_SCHEMA

mpoletto
источник
-3

Согласно документации, вы можете добавлять комментарии только во время создания таблицы. Таким образом, необходимо иметь определение таблицы. Один из способов автоматизации - использование сценария для чтения определения и обновления ваших комментариев.

Ссылка:

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

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

Нагешвара Рао
источник
2
Этот ответ неверен (можно обновить комментарии после создания таблицы, даже если это утомительно), и он ссылается только на другие веб-сайты, поэтому он бесполезен с точки зрения ответа на переполнение стека.
Лукас Эдер