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


Ответы:


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


-3

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

Ссылка:

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

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


2
Этот ответ неверен (можно обновить комментарии после создания таблицы, даже если это утомительно), и он ссылается только на другие веб-сайты, поэтому он бесполезен с точки зрения ответа на переполнение стека.
Лукас Эдер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.