Изменить таблицу MySQL, чтобы добавить комментарии к столбцам - PullRequest
94 голосов
/ 29 января 2010

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

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

-- for columns
-- ???

Ответы [ 5 ]

113 голосов
/ 29 января 2010

попробуй:

 ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'  
29 голосов
/ 17 марта 2014

Вы можете использовать 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 для столбца, иначе они будут потеряны.

11 голосов
/ 22 июля 2013

Скрипт для всех полей в базе данных:

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, великолепно, но если у вас есть автоматическое увеличение, оно сломает его.

3 голосов
/ 13 марта 2014

Ответ Руфинуса уместен. Я бы предпочел использовать MODIFY вместо CHANGE, если вам не нужно менять имя столбца.

Я не согласен с комментарием Маркуса Папы. Схема информационной базы данных mysql или любое другое место, где находится информационная схема и которая содержит определение данных любой базы данных, не место для обработки этих вещей. Информационная схема используется SGBD для записи изменений, требуемых любой командой DDL, которая была выполнена для базы данных. Зачем нам нужны команды DDL?

Существует два типа команд SQL для использования в любой реляционной базе данных: DML и DDL. При добавлении комментария необходимо изменить структуру таблицы.

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

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

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

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

0 голосов
/ 29 февраля 2012

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

Справка:

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

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

...