Я проверял документацию 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
a AUTO_INCREMENT
, вам нужно явно указать модификатор AUTO_INCREMENT
снова в предложении MODIFY
, или столбец перестанет быть столбцом AUTO_INCREMENT
. Аналогично, если столбец определяется как NOT NULL
или имеет значение DEFAULT
, эти данные должны быть включены при выполнении MODIFY
или CHANGE
в столбце или они будут потеряны.
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
Примечание. Вы можете улучшить только одну таблицу, если хотите
Решение, данное @Rufinus, велико, но если у вас есть автоматические приращения, он сломает его.
Ответ Руфинуса уместен. Я бы предпочел использовать MODIFY вместо CHANGE, если вам не нужно менять имя столбца.
Я не согласен с комментарием Маркуса Папы. Схема информационной базы данных mysql или любое другое место, где находится информационная схема и которая содержит определение данных любой базы данных, не место для обработки этих вещей. Информационная схема используется SGBD для записи изменений, требуемых любой командой DDL, которая была выполнена для базы данных. Зачем нам нужны команды DDL?
Существует два типа команд SQL для использования в любой реляционной базе данных: DML и DDL. Когда вы добавляете комментарий, вам нужно изменить структуру таблицы.
Из документации MySQL 5.6:
"INFORMATION_SCHEMA - это база данных в каждом экземпляре MySQL, место, где хранится информация обо всех других базах данных, которые поддерживает сервер MySQL. База данных INFORMATION_SCHEMA содержит несколько таблиц только для чтения. Они на самом деле являются представлениями, а не базовыми таблицами, поэтому файлов нет. связанные с ними, и вы не можете устанавливать на них триггеры.Кроме того, нет каталога базы данных с таким именем.
Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью оператора USE, вы можете только читать содержимое таблиц, но не выполнять над ними операции INSERT, UPDATE или DELETE. "
В соответствии с документацией вы можете добавлять комментарии только во время создания таблицы. Поэтому необходимо иметь определение таблицы. Один из способов автоматизировать его с помощью script, чтобы прочитать определение и обновить ваши комментарии.
Ссылка:
http://cornempire.net/2010/04/15/add-comments-to-column-mysql/