Подтвердить что ты не робот

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

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

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

-- for columns
-- ???
4b9b3361

Ответ 1

попробуйте:

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

Ответ 2

Вы можете использовать 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 a AUTO_INCREMENT, вам нужно явно указать модификатор AUTO_INCREMENT снова в предложении MODIFY, или столбец перестанет быть столбцом AUTO_INCREMENT. Аналогично, если столбец определяется как NOT NULL или имеет значение DEFAULT, эти данные должны быть включены при выполнении MODIFY или CHANGE в столбце или они будут потеряны.

Ответ 3

Script для всех полей в базе данных:

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
  • Экспортировать все в CSV
  • Откройте его в своем любимом редакторе csv

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

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

Ответ 4

Ответ Руфинуса уместен. Я бы предпочел использовать 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

Ответ 5

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

Ссылка:

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

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