Змініть таблицю MySQL, щоб додавати коментарі до стовпців


Відповіді:


134

спробуйте:

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

12
Здається, це працює добре, але чи є інший спосіб зробити це без включення визначення стовпця?
Jhonny D. Cano -Laftware-

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на колонці або вони будуть втрачені.


13

Сценарій для всіх полів бази даних:

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
За словами нового користувача, який не має достатньої кількості представників для коментарів, це dump.aux_comment,потрібно column_comment,. Чи проти заперечити, чи це правда?
nhahtdh

Вибачте за помилку.
workdreamer

Звичайно, якщо у вас є ідентифікатор auto_increment, вам потрібно це зробити ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';. Це не порушує автоматичні кроки.
mpoletto

@workdreamer Я посилався на рішення Rufinus, яке, на вашу думку, може призвести до порушення автоматичного збільшення. Ні, дане рішення не порушує його.
mpoletto

1
Дивовижно!
Rizki Noor Hidayat Wijaya

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.