Я проверял документацию MySQL для ALTER TABLE, и, похоже, она не включает способ добавления или изменения комментария к столбцу. Как я могу это сделать?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
Я проверял документацию MySQL для ALTER TABLE, и, похоже, она не включает способ добавления или изменения комментария к столбцу. Как я могу это сделать?
-- for table
ALTER TABLE myTable COMMENT 'Hello World'
-- for columns
-- ???
Ответы:
пытаться:
ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) COMMENT 'id of user'
Вы можете использовать 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
для столбца, иначе они будут потеряны.
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
Примечание: вы можете улучшить только одну таблицу, если хотите
Решение, данное @Rufinus, отличное, но если у вас есть автоматическое приращение, оно сломается.
dump.aux_comment,
должно быть column_comment,
. Не могли бы вы проверить, правда ли это?
ALTER TABLE MODIFY id INT NOT NULL AUTO_INCREMENT COMMENT 'id of user';
. Это не нарушает автоматические приращения.
Информационная схема - не место для рассмотрения этих вещей (см. Команды базы данных DDL).
Когда вы добавляете комментарий, вам нужно изменить структуру таблицы (комментарии к таблице).
Из документации MySQL 5.6:
INFORMATION_SCHEMA - это база данных в каждом экземпляре MySQL, место, где хранится информация обо всех других базах данных, поддерживаемых сервером MySQL. База данных INFORMATION_SCHEMA содержит несколько таблиц, доступных только для чтения. На самом деле это представления, а не базовые таблицы, поэтому с ними не связаны файлы, и вы не можете устанавливать для них триггеры. Кроме того, нет каталога базы данных с таким именем.
Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью оператора USE, вы можете только читать содержимое таблиц, но не выполнять над ними операции INSERT, UPDATE или DELETE.
Согласно документации, вы можете добавлять комментарии только во время создания таблицы. Таким образом, необходимо иметь определение таблицы. Один из способов автоматизации - использование сценария для чтения определения и обновления ваших комментариев.
Ссылка:
http://cornempire.net/2010/04/15/add-comments-to-column-mysql/